NSTimer无效后,触摸处理无响应

时间:2011-05-14 23:46:00

标签: iphone objective-c nstimer touchesbegan

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

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

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

[loopTimer invalidate];

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

4 个答案:

答案 0 :(得分:1)

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

我不确定你到底有什么问题。不管怎样试试...... 您可以使用调度方法..

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

如果您使用相同的功能取消安排,则可以使用

[self unschedule:_cmd];

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

答案 1 :(得分:1)

这听起来好像你没有正确地保留视图或者经常发布它。 NSTimer保留其目标对象,一旦invalidate计时器,它就会释放其目标对象。在您的情况下,这似乎使保留计数器下降到0,因此它被取消分配。

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

答案 2 :(得分:0)

不,无论如何它都不会影响你的runloop。事实上,我自己检查了一下,在我使计时器失效之后,我能够处理屏幕上的触摸。所以我猜问题是别的。

答案 3 :(得分:0)

我似乎已经通过在-dealloc()方法中放入-invalidate()来解决问题。因此,当我想要结束循环时,我调用[self.view removeFromSuperView]并最终调用invalidate。

在视图中添加-invalidate()lifecyle似乎解除了视图...