如何检查NSTimer是否已经失效
我有一个NSTimer
对象,如果用户点击button或者退出视图,我需要使其失效。
所以我有:
[myNSTimer invalidate];
在我的button处理程序和里面viewWillDisappear
。 如果用户点击一个button,然后存在一个视图,应用程序会抛出一个exception,因为myNSTimer
已经失效。 我在viewWillDisappear
方法中需要做的是检查myNSTimer
是否失效。 我怎么做?
我试过了:
if(myNSTimer != nil) [myNSTimer invalidate];
但是这并没有奏效。
一旦你使定时器失效,只需调用release
(假设你保留了你所持有的引用),然后删除你的引用。 这样,当你退出视图,第二次尝试使计时器无效时,只会在nil上调用该方法,而不执行任何操作。
或者,您可以使用-[NSTimer isValid]
在无效之前检查它是否有效,但无论如何,在无效之后真的没有理由保留您的引用。 另外,如果你真正的问题是你没有保留你的引用,所以第一个-invalidate
实际上留给你一个引用指向一个释放的对象,然后调用-isValid
也无济于事。
通常我会做的是无论是持有定时器的成员variables,无论是当它触发,或者当我无效。 那么你可以做:
[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() }