2014年12月12日 星期五

[Objective-C] NSTimer觀念釐清

NSTimer不等於開了一條新的執行序

他只是看起來效果很像開了一條新的執行序,事實上還在同一條執行序執行

在這裡做個實驗就能知道。

假如是開一條新的執行序,那如果在原本的地方放一個無窮迴圈,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事實上不是多開一條執行序,他只是 先註冊幾秒後要呼叫某個事件,但是還是在同一條執行序之上,看起來很像多執行序的效果,但事實上卻沒有。





沒有留言:

張貼留言