如何检查NSTimer是否已经失效

sub*_*e-c 12 iphone cocoa-touch objective-c nstimer ios

我有一个NSTimer对象,如果用户点击按钮或退出视图,我需要使其无效.

所以我有:

[myNSTimer invalidate];
Run Code Online (Sandbox Code Playgroud)

在我的按钮处理程序内部viewWillDisappear.如果用户点击按钮然后存在视图,则应用程序会抛出异常,因为myNSTimer已经失效.我在该viewWillDisappear方法中需要做的是检查是否myNSTimer已经失效.我怎么做?

我试过了:

if(myNSTimer != nil)
  [myNSTimer invalidate];
Run Code Online (Sandbox Code Playgroud)

但那没用.

Lil*_*ard 33

一旦你使计时器无效,只需调用release它(假设你保留了你所持有的引用),然后将你的引用取消.这样当你退出视图时,尝试第二次使计时器失效只会在nil上调用该方法,而这样做什么都不做.

或者,您可以-[NSTimer isValid]在无效之前使用它来检查它是否有效,但是在第一次无效之后,确实没有理由保留您的引用.此外,如果你真正的问题是你没有保留你的引用,所以第一个-invalidate实际上留给你一个指向释放对象的引用,那么-isValid无论如何调用都无济于事.


Ben*_*ieb 6

我通常做的是将持有计时器的成员变量清零,无论是在它触发时,还是在我使其无效时.然后你可以这样做:

[myNSTimer invalidate]; 
myNSTimer = nil;
Run Code Online (Sandbox Code Playgroud)

它会做正确的事情.