遇到iPhone NSTimer失效问题

时间:2010-07-17 07:55:26

标签: iphone objective-c crash triggers nstimer

好的,所以我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个定时器在各自按钮的TouchDown事件上发生。在TouchUpInside事件中,我有相应的代码,告诉每个计时器[pressTimer invalidate]pressTimer = nil。现在我添加第二个计时器时发生的问题是,当选择器被触发时(因此释放按钮并触发TouchUpInside事件),应用程序崩溃并吐出Not recognized [NSCFTimer -invalidate]或类似的东西。按钮正常工作,直到定时器触发,甚至在我松开手指之前不会崩溃。我认为正在发生的事情是TouchUpInside事件试图使无效/触发的计时器无效,因为它在计时器仍在运行时工作正常。我想知道为什么会发生这种情况,因为它在我添加第二个计时器之前从未发生过。我的临时修复是设置计时器的repeating:YES部分,这支持我的理论,它不能使无效/触发的计时器无效。有什么建议吗?

*奖励:在相关的说明中,在iTunes Connect中显示之前,我需要从人们那里获得多少次崩溃?

1 个答案:

答案 0 :(得分:0)

首先,pressTimer=nil没有用处; nil分配仅在retain ed属性(即self.timer = nil;)上使用setter时释放对象。 (这实际上是:[self setTimer:nil]!)

但即便如此,如果你自己错误引用并使用了setter,则无需释放NSTimer实例,只需要invalidate d。你的“引用”错误不应该发生。

至于你的理论:你可以在这种情况下将invalidate看作release - 你不能经常这样做......

手册指出,无效需要从安装它的同一个线程调用,除此之外没有任何理由可以崩溃。