好的,所以我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个定时器在各自按钮的TouchDown事件上发生。在TouchUpInside事件中,我有相应的代码,告诉每个计时器[pressTimer invalidate]
和pressTimer = nil
。现在我添加第二个计时器时发生的问题是,当选择器被触发时(因此释放按钮并触发TouchUpInside事件),应用程序崩溃并吐出Not recognized [NSCFTimer -invalidate]
或类似的东西。按钮正常工作,直到定时器触发,甚至在我松开手指之前不会崩溃。我认为正在发生的事情是TouchUpInside事件试图使无效/触发的计时器无效,因为它在计时器仍在运行时工作正常。我想知道为什么会发生这种情况,因为它在我添加第二个计时器之前从未发生过。我的临时修复是设置计时器的repeating:YES
部分,这支持我的理论,它不能使无效/触发的计时器无效。有什么建议吗?
*奖励:在相关的说明中,在iTunes Connect中显示之前,我需要从人们那里获得多少次崩溃?
答案 0 :(得分:0)
首先,pressTimer=nil
没有用处; nil
分配仅在retain
ed属性(即self.timer = nil;
)上使用setter时释放对象。 (这实际上是:[self setTimer:nil]
!)
但即便如此,如果你自己错误引用并使用了setter,则无需释放NSTimer
实例,只需要invalidate
d。你的“引用”错误不应该发生。
至于你的理论:你可以在这种情况下将invalidate
看作release
- 你不能经常这样做......
手册指出,无效需要从安装它的同一个线程调用,除此之外没有任何理由可以崩溃。