iOS:为什么计时器和performSelector立即触发选定的方法?

问题描述

| 我尝试同时使用:
[NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(enableGestures)
                                   userInfo:nil
                                    repeats:NO];
[self performSelector:@selector(enableGestures) withObject:nil afterDelay:2.0];
触发enableGestures方法,但是在两个版本中均被触发两次! (首先是计时器启动,然后是2秒后)。第二个片段也一样。为什么呢 谢谢     

解决方法

        “ 2”消息的选择器应具有以下签名:
- (void)enableGestures:(NSTimer*)theTimer
我编写了一些测试代码,并且没有为选择器正确签名,有时会立即调用选择器,然后在计时器结束时再次调用该选择器。当我将其更改为适当的签名时,会在适当的延迟后首先调用选择器。我从未见过使用格式正确的签名会出现此问题的情况,并且大约有一半的时间会看到签名不正确的问题。 我尝试了第二个版本,并且每次都能正常运行。 如果这两种时序代码都发生这种情况,则该代码中某处的其他内容正在发送“ 4”消息。