1)我在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
有人知道为什么我一直两次看到这条消息吗? 提前谢谢。
答案 0 :(得分:1)
实际上它没有调用选择器两次,它正在连续调用选择器,因为在初始化定时器时你已经写了repeats:YES];.
但是在你的选择器中有一个条件块,它只在1秒内正常并且你的计时器正在触发选择器每半秒。所以它打印两次。