我有一个NSTimer
对象,如果用户点击按钮或退出视图,我需要使其无效.
所以我有:
[myNSTimer invalidate];
在我的按钮处理程序内部viewWillDisappear
.如果用户点击按钮然后存在视图,则应用程序会抛出异常,因为myNSTimer
已经失效.我在该viewWillDisappear
方法中需要做的是检查是否myNSTimer
已经失效.我怎么做?
我试过了:
if(myNSTimer != nil) [myNSTimer invalidate];
但那没用.
一旦你使计时器无效,只需调用release
它(假设你保留了你所持有的引用),然后将你的引用取消.这样当你退出视图时,尝试第二次使计时器失效只会在nil上调用该方法,而这样做什么都不做.
或者,您可以-[NSTimer isValid]
在无效之前使用它来检查它是否有效,但是在第一次无效之后,确实没有理由保留您的引用.此外,如果你真正的问题是你没有保留你的引用,所以第一个-invalidate
实际上留给你一个指向释放对象的引用,那么-isValid
无论如何调用都无济于事.
我通常做的是将持有计时器的成员变量清零,无论是在它触发时,还是在我使其无效时.然后你可以这样做:
[myNSTimer invalidate]; myNSTimer = nil;
它会做正确的事情.