创建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
上发出新请求),只需要一个计时器就会发出多个请求。
答案 0 :(得分:3)
您需要自己保留计时器,以确保它在触发后仍然存在。 scheduledTimerWithTimeInterval
返回您不拥有的自动释放的实例。