1

这是我在 touchesMoved:withEvent: 中使用的代码。计时器会使用以下代码偶尔触发:

if(_pauseTimer) {
                [_pauseTimer invalidate];
                _pauseTimer=nil;
            }
            //Restart the pause timer.
            _pauseTimer = [NSTimer scheduledTimerWithTimeInterval:_settings.pauseTime
                                                              target:self
                                                            selector:@selector(timerExpired:)
                                                                userInfo:_pauseTimer
                                                             repeats:NO];

但是,一旦我注释掉 _pauseTimer=nil,它的行为就正确了;即,除非调用 touchesMoved:withEvent: 之间的时间为 _settings.pauseTime,否则它不会再次触发。为什么那个“旧的” _pauseTimer 尽管被无效并设置为零,但仍然存在?

4

1 回答 1

0

我看到您的问题的两个可能原因。

  1. userInfo 计时器的用户信息。您指定的对象由计时器保留,并在计时器无效时释放。此参数可能为零。

  2. 您必须从安装了计时器的线程发送无效消息。如果您从另一个线程发送此消息,则与计时器关联的输入源可能不会从其运行循环中删除,这可能会阻止线程正确退出。

于 2013-08-28T06:51:12.163 回答