2011-08-31 75 views
1

1)I創建的NSTimer上viewDidLoad中NSTimer在同一線程上調用兩次選擇器方法?

#ifndef NDEBUG 
    NSLog(@"************In viewDidLoad method initializng timer [%@]",[NSThread currentThread]); 
#endif 
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(onTimerKicks:) userInfo:clues repeats:YES]; 

2)選擇回叫執行一些條件邏輯(播放視頻的時間)。問題是每次定時器醒來時它都調用選擇器方法兩次在同一個線程上的同一個實例!我怎麼知道 ? NS日誌語句打印線程細節和調試。

- (void) onTimerKicks:(NSTimer *) timer 
{ 

    if (currentPlaybackTime == 10) { 

#ifndef NDEBUG 
     NSLog(@"[%@] ************calling onTimerKicks:onAutoPageTimer from onTimer current playbacktime = %d", [NSThread currentThread], currentPlaybackTime); 
#endif 

    } 
} 

3)這裏是一個喚醒調試了定時

2011-08-30 19:11:51.759 MASLTales[7735:207] ************In viewDidLoad method initializng timer [<NSThread: 0x580f3a0>{name = (null), num = 1}] 
2011-08-30 19:12:05.760 MASLTales[7735:207] [<NSThread: 0x580f3a0>{name = (null), num = 1}] ************ccalling onTimerKicks:onAutoPageTimer from onTimer current playbacktime = 10 
2011-08-30 19:12:06.260 MASLTales[7735:207] [<NSThread: 0x580f3a0>{name = (null), num = 1}] ************ccalling onTimerKicks:onAutoPageTimer from onTimer current playbacktime = 10 

任何人知道爲什麼我看到這則消息的兩倍所有的時間? 在此先感謝。

回答

1

其實它不是調用選擇兩次,它不斷將調用選擇,因爲在初始化計時器你寫repeats:YES];.但在你的選擇有一個條件塊這是真的只爲1秒,你的計時器,每發射選擇半秒鐘。所以它的印刷兩次。

+0

發誓很快。我增加了我的計時器爲每2秒。現在這一切都有道理。非常感謝'saadnib' – wysiwyg