他只是看起來效果很像開了一條新的執行序,事實上還在同一條執行序執行
在這裡做個實驗就能知道。
假如是開一條新的執行序,那如果在原本的地方放一個無窮迴圈,NSTimer執行的方法應該會繼續執行。
測試A,NSTimer是否開了一條新的執行序
- (void)viewDidLoad
{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerSayHi) userInfo:nil repeats:YES];
}
-(void)timerSayHi
{
NSLog(@"HI");
}
拉入一個Button並設定一個IBAction,來做無窮迴圈
- (IBAction)Loop:(id)sender {
while (true) {
}
}
原本是每秒會呼叫一次,按下Button之後, 之後整個就卡住了
2014-12-13 01:21:16.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:17.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:18.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:19.605 HelloTimer[13080:322406] HI
這樣可以測出Timer事實上不是多開一條執行序,他只是 先註冊幾秒後要呼叫某個事件,但是還是在同一條執行序之上,看起來很像多執行序的效果,但事實上卻沒有。
2014-12-13 01:21:16.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:17.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:18.605 HelloTimer[13080:322406] HI
2014-12-13 01:21:19.605 HelloTimer[13080:322406] HI
這樣可以測出Timer事實上不是多開一條執行序,他只是 先註冊幾秒後要呼叫某個事件,但是還是在同一條執行序之上,看起來很像多執行序的效果,但事實上卻沒有。
沒有留言:
張貼留言