iOS:为什么timer(和performSelector)会立即触发所选方法?

时间:2011-06-14 11:38:34

标签: objective-c ios

我试过用这两个:

[NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(enableGestures)
                                   userInfo:nil
                                    repeats:NO];

[self performSelector:@selector(enableGestures) withObject:nil afterDelay:2.0];

触发enableGestures方法,但在两个版本中都会触发两次! (首先是定时器启动,第二次是2秒后)。第二个片段也是如此。为什么?

感谢

1 个答案:

答案 0 :(得分:1)

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:消息的选择器应具有此签名:

- (void)enableGestures:(NSTimer*)theTimer

我写了一些测试代码,如果选择器没有正确的签名,有时会立即调用选择器,然后在计时器完成时再次调用。当我将其更改为正确的签名时,在适当的延迟后首先调用选择器。我从未在格式正确的签名中看到这个问题,并且大约一半的时间在签名不正确的情况下看到了这个问题。

我尝试了第二个版本,每次都正常工作。

如果这种情况与两种版本的计时代码一致,则代码中某处的其他内容正在发送enableGestures消息。