提问人:subjective-c 提问时间:12/15/2008 最后编辑:iDevelopersubjective-c 更新时间:5/16/2016 访问量:18094
如何检查 NSTimer 是否已经失效
How to check if NSTimer has been already invalidated
问:
我有一个对象,如果用户点击按钮或退出视图,我需要使该对象失效。NSTimer
所以我有:
[myNSTimer invalidate];
在我的按钮处理程序内部和内部.如果用户点击某个按钮,然后存在一个视图,则应用将引发异常,因为该视图已失效。
我在方法中需要做的是检查是否已失效。我该怎么做?viewWillDisappear
myNSTimer
viewWillDisappear
myNSTimer
我试过:
if(myNSTimer != nil)
[myNSTimer invalidate];
但这没有用。
答:
33赞
Lily Ballard
12/15/2008
#1
一旦你使计时器失效,只需调用它(假设你已经保留了你所持有的引用),然后取消你的引用。这样,当您退出视图时,尝试再次使计时器失效只会在 nil 上调用该方法,这不会执行任何操作。release
或者,您可以使用在失效之前检查它是否有效,但无论如何,在第一次失效后,您真的没有理由保留您的引用。此外,如果你真正的问题是你没有保留你的引用,所以第一个实际上给你留下了一个指向已释放对象的引用,那么调用无论如何都无济于事。-[NSTimer isValid]
-invalidate
-isValid
评论
0赞
H6_
5/10/2011
这正是我问题的解决方案。谢谢。message sent to deallocated instance
6赞
Ben Gottlieb
12/15/2008
#2
我通常做的是,在触发计时器时或使计时器失效时,对持有计时器的成员变量进行清零。然后你可以做:
[myNSTimer invalidate];
myNSTimer = nil;
它会做正确的事情。
3赞
Yunus Nedim Mehel
10/11/2012
#3
当我尝试暂停和重新启动计时器时,我遇到了同样的问题。要停止它,请执行以下操作:
[timer invalidate];
[timer release];
timer = nil;
并启动/重新启动它:
timer = [[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(aSelector) userInfo:nil repeats:YES] retain];
现在,当我使它失效时,它不会崩溃。
1赞
Crashalot
4/20/2016
#4
迅速:
if timer.valid {
timer.invalidate()
}
评论