如何检查NSTimer是否已自动失效?

时间:2011-07-19 08:50:14

标签: iphone objective-c cocoa-touch nstimer

创建NSTimer时遇到问题而不重复。

想象一下,我创建了一个新实例

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(updateSystems) userInfo:nil repeats:NO];

我的代码中的某处。

如果我按下Iphone上的主页按钮,我的应用程序将进入后台状态,计时器仍然会出现,只是暂停。所以在我的applicationDidEnterBackground方法中我说

if(timer.isValid == YES)
{
    [timer invalidate];
    timer = nil;
}

如果在计时器完成后按Home键,则会出现问题。然后计时器已被释放,导致尝试访问isValid时崩溃。

尝试

if(timer != nil) 
{
    [timer invalidate];
    timer = nil;
} 

导致同样的崩溃,因为Cocoa的自动失效似乎没有将计时器设置为nil

如何检查计时器是否已自动失效?

谢谢。

注意:我需要这样做的原因是因为我发送请求到Web服务,一旦请求成功(或失败)我启动一个计时器,一旦它被解雇就会发送一个新请求。如果我在计时器完成之前没有使计时器失效,那么将创建几个计时器(因为我在applicationDidBecomeActive上发出新请求),只需要一个计时器就会发出多个请求。

1 个答案:

答案 0 :(得分:3)

您需要自己保留计时器,以确保它在触发后仍然存在。 scheduledTimerWithTimeInterval返回您不拥有的自动释放的实例。