Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone NSTimer失效问题_Iphone_Objective C_Crash_Triggers_Nstimer - Fatal编程技术网

iPhone NSTimer失效问题

iPhone NSTimer失效问题,iphone,objective-c,crash,triggers,nstimer,Iphone,Objective C,Crash,Triggers,Nstimer,好吧,我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个计时器,它们在各自按钮的触地事件中启动。在TouchUpInside事件中,我有相应的代码告诉每个计时器[pressTimer invalidate]和pressTimer=nil。自从我添加了第二个计时器后,现在出现的问题是,当选择器被触发时(从而释放按钮并触发TouchUpInside事件),应用程序崩溃并吐出一个无法识别的[NSCFTimer-invalidate]或类似的东西。按钮正常工作,直到计时器触发,甚至直到我松开手指

好吧,我知道我刚才问了一个类似的问题,但这是不同的。我现在有两个计时器,它们在各自按钮的触地事件中启动。在TouchUpInside事件中,我有相应的代码告诉每个计时器
[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需要从安装它的同一线程调用,除此之外,没有任何原因导致崩溃。

您问题中的“或类似的”部分令人担忧。它到底吐出了什么?:)