0

我正在创建一个重复的 NSTimer 对象,该对象-Loop()在运行循环的每次迭代中调用该方法:-

NSTimer *loopTimer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(Loop) userInfo:nil repeats:YES];

在 Loop() 中,我在必要时使计时器无效:-

[loopTimer invalidate];

但是,在使用 -invalidate() 之后,触摸处理方法 -touchesBegan()、-touchesEnded() 停止响应触摸事件。NSTimer 会以某种方式影响运行循环吗?

4

4 回答 4

1

你还在循环方法中使用什么......

我不确定你到底有什么问题。无论如何试试这个......你可以使用调度方法..

[self schedule:@selector(loop) interval:TIMER_INTERVAL];

如果你在同一个函数中取消调度,你可以使用

[self unschedule:_cmd];

否则,您可以使用[self unschedule:@selector(loop)];

于 2011-05-15T04:22:34.533 回答
1

这听起来像是您没有正确保留视图或过于频繁地释放它。NSTimer 保留其目标对象,一旦您invalidate使用计时器,它就会释放其目标对象。在您的情况下,这似乎使保留计数器下降到 0,因此被释放。

您可以通过在您的前面添加一个 NSLog[loopTimer invalidate];并在视图的开头添加另一个来验证这一点dealloc。我敢打赌,您会dealloc在日志之后立即看到 的日志消息invalidate

于 2011-05-19T08:34:52.943 回答
0

不,无论如何它都不会影响您的运行循环。事实上,我自己检查了它,在我使计时器无效后,我能够处理屏幕上的触摸。所以我想问题是别的。

于 2011-05-15T05:15:41.777 回答
0

我似乎通过将 -invalidate() 放入 -dealloc() 方法中解决了这个问题。因此,当我想结束循环时,我调用 [self.view removeFromSuperView] 并最终调用无效。

将 -invalidate() 放入视图生命周期似乎会释放视图...

于 2011-05-15T19:35:29.703 回答