iPhone NSTimer失效问题
好吧,我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个计时器,它们在各自按钮的触地事件中启动。在TouchUpInside事件中,我有相应的代码告诉每个计时器iPhone NSTimer失效问题,iphone,objective-c,crash,triggers,nstimer,Iphone,Objective C,Crash,Triggers,Nstimer,好吧,我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个计时器,它们在各自按钮的触地事件中启动。在TouchUpInside事件中,我有相应的代码告诉每个计时器[pressTimer invalidate]和pressTimer=nil。自从我添加了第二个计时器后,现在出现的问题是,当选择器被触发时(从而释放按钮并触发TouchUpInside事件),应用程序崩溃并吐出一个无法识别的[NSCFTimer-invalidate]或类似的东西。按钮正常工作,直到计时器触发,甚至直到我松开手指
[pressTimer invalidate]
和pressTimer=nil
。自从我添加了第二个计时器后,现在出现的问题是,当选择器被触发时(从而释放按钮并触发TouchUpInside事件),应用程序崩溃并吐出一个无法识别的[NSCFTimer-invalidate]
或类似的东西。按钮正常工作,直到计时器触发,甚至直到我松开手指才崩溃。我认为发生的是TouchUpInside事件试图使无效/触发的计时器无效,因为它在计时器仍在运行时工作正常。我想知道为什么会发生这种情况,因为在我添加第二个计时器之前从未发生过。我的临时解决方案是设置计时器的repeating:YES
部分,这支持了我的理论,即它不能使无效/触发的计时器无效。有什么建议吗
*额外好处:另一方面,在人们出现在iTunes Connect中之前,我需要从他们那里获得多少次崩溃?首先,按下计时器=nil没有任何作用
nil
assignment仅在retain
ed属性上使用setter时释放对象,即self.timer=nil代码>。(这实际上是:[self-setTimer:nil]
!)
但即便如此,如果您错误地引用了自己的话,并且确实使用了setter,则不需要释放NSTimer
实例,只需要将其设置为invalidate
d即可。您的“引用类型”错误不应发生
至于你的理论:在这种情况下,你可以把<代码>失效
解读为<代码>发布——你不能经常这么做
手册指出,invalidate需要从安装它的同一线程调用,除此之外,没有任何原因导致崩溃。您问题中的“或类似的”部分令人担忧。它到底吐出了什么?:)