Я получаю информацию с сервера в своем приложении со значением 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];
Но это не становится недействительным? Что я делаю не так?