Я создаю контроллер представления игры, используя NSTimer
для обновления индикатора выполнения, представляющего оставшееся время текущего игрового раунда. В этом игровом представлении также отображается кнопка, выполняющая некоторые обновления данных легкого ядра. Когда оставшееся время истекло, таймер становится недействительным и выдвигается новое представление.
Первая загрузка игрового вида в жизненном цикле приложения работает отлично: никаких подтормаживаний при нажатии на кнопку и обновлении данных ядра. Но когда я отодвигаю тот же вид игры в жизненном цикле приложения, нажатия кнопок делают индикатор выполнения прерывистым и безответственным.
Разве NSTimer
не аннулируется должным образом в цикле выполнения? Должен ли я вместо этого использовать CADisplayLink
, хотя мое представление не использует много ресурсов?
Заранее спасибо.
Вот мой код:
Объявление таймера в файле .h
:
@property (weak, nonatomic) NSTimer *updatetimer;
Создание таймера в viewDidLoad
:
self.updatetimer = [NSTimer timerWithTimeInterval:counterStep target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.updatetimer forMode:NSRunLoopCommonModes];
функция updateProgress:
- (void)updateProgress
{
//compute current time
currentTime = currentTime - counterStep;
//set timer label to int value of current time
self.timerLabel.text = [[NSString alloc] initWithFormat:@"%d",[[NSNumber numberWithDouble:currentTime] intValue]];
//update progress bar accordingly
[self.progressbar setProgress: currentTime / totalTime animated:YES];
if(currentTime <= 0)
{
//call the method that invalidates the timer + pushes to the next view
[self overallTimeEnd];
}
}
Недействительность таймера:
[self.updatetimer invalidate];
self.updatetimer = nil;
dealloc
. Вы подтвердили, что попали в эту очередь? - person Rob   schedule 10.07.2014CADisplayLink
в своем приложении в одном основном объекте... и оттуда вы вызываете функции в своих представлениях, если это необходимо (например, каждые 10 кадров или по прошествии определенного времени) - person Bastian   schedule 10.07.2014