这段代码有问题吗?
self.UpdateTimer = [NSTimer scheduledTimerWithTimeInterval:60. target:self selector:@selector(update:) userInfo:nil repeats:YES];
我注意到这是一个经常调用的方法。但是,只有一个地方定时器无效并设置为nil ...该类的dealloc。
多次设置新计时器会自动使旧计时器失效吗?
答案 0 :(得分:2)
不,将计时器设置为新对象不会使之前的计时器无效。如果多次调用该行代码,最终会运行多个计时器,但只会在其他地方的一个地方使当前引用的计时器无效。
创建计时器时,您应该检查一个计时器是否已经设置并在创建新计时器之前使其无效。
if( self.UpdateTimer )
{
[self.UpdateTimer invalidate];
self.UpdateTimer = nil;
}
self.UpdateTimer = [NSTimer scheduledTimerWithTimeInterval:60. target:self selector:@selector(update:) userInfo:nil repeats:YES];
或者,如果您不需要重置计时器间隔,只需将原始程序保持运行。
if( !self.UpdateTimer )
{
self.UpdateTimer = [NSTimer scheduledTimerWithTimeInterval:60. target:self selector:@selector(update:) userInfo:nil repeats:YES];
}