我从应用程序中的服务器获取具有 secondsToEnd 值的信息,并在收到此信息后启动计数器。
我的项目包含一个滚动视图,因此为了避免由于滚动而锁定我的计时器,我通过以下方式将计时器添加到 NSRunLoop:
[[NSRunLoop currentRunLoop] addTimer:timer
forMode:NSRunLoopCommonModes];
我创建了一个名为的 NSTimer 属性,它是多么原始,计时器,这是我的 startTimer 函数的整个片段:
- (void)startTimer
{
if (_timer || [_timer isValid]) [_timer invalidate], _timer = nil, [_timer release];
NSTimer * timer = [[NSTimer alloc] initWithFireDate:[NSDate date]
interval:1.0
target:self
selector:@selector(timer:)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer
forMode:NSRunLoopCommonModes];
[self setTimer:timer];
[timer release];
}
在 start 方法中检查无效的原因是因为 secondsToEnd 值达到 0 后,我收到一个新的,我再次调用 startTimer。
在我的 dealloc 方法中,我有这个:
if (_timer || [_timer isValid]) [_timer invalidate], _timer = nil, [_timer release];
但它不会失效吗?我究竟做错了什么?