我正在创建一个重复的NSTimer对象,在运行循环的每次迭代中调用-Loop()
方法: -
NSTimer *loopTimer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(Loop) userInfo:nil repeats:YES];
在Loop()中,我在必要时使计时器无效: -
[loopTimer invalidate];
但是,在使用-invalidate()之后,触摸处理方法-touchesBegan(), - tuchesEnded()停止响应触摸事件。 NSTimer会以某种方式影响运行循环吗?
答案 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似乎解除了视图...