如何检查NSTimer是否已经失效
问题描述:
我有一个NSTimer
对象,如果用户点击一个按钮或者他们退出视图,我需要使其无效。如何检查NSTimer是否已经失效
所以我必须:
[myNSTimer invalidate];
在我的按钮处理程序和内部viewWillDisappear
。如果用户点击按钮然后存在一个视图,则该应用程序会抛出异常,因为myNSTimer
已经失效。 我在viewWillDisappear
方法中需要做的是检查myNSTimer
是否已失效。我怎么做?
我已经试过:
if(myNSTimer != nil)
[myNSTimer invalidate];
,但没有奏效。
答
一旦你使计时器失效,只需在其上调用release
(假设你保留了你所持有的参考),然后删除你的参考。这样,当你退出视图时,第二次尝试使定时器无效将仅在nil上调用该方法,而不执行任何操作。
或者,您可以使用-[NSTimer isValid]
在无效之前检查它是否有效,但是无论如何,在无效之后无效保留您的引用是没有任何理由的。另外,如果你真正的问题是你没有保留你的参考,所以第一个-invalidate
实际上留给你一个参考指向一个释放的对象,然后调用-isValid
无论如何不会有帮助。
答
我通常会做的事情是剔除持有计时器的成员变量,无论是何时触发,还是无效。那么你可以这样做:
[myNSTimer invalidate];
myNSTimer = nil;
它会做正确的事情。
答
我在尝试暂停时遇到了同样的问题&重新启动计时器。要停止它:
[timer invalidate];
[timer release];
timer = nil;
,并启动/重新启动:
timer = [[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(aSelector) userInfo:nil repeats:YES] retain];
现在,当我使它无效它不会崩溃。
答
斯威夫特:
if timer.valid {
timer.invalidate()
}
谢谢您的回答! – 2008-12-16 03:50:33