Таймер отключается автоматически, когда приложение уходит в отставку на iphone?

Играем с таймерами и пытаемся заставить их вести себя правильно, когда приложение отправляется в фоновый режим, уничтожается и т. д.

Судя по сгенерированным комментариям в xcode, вы должны отключить/аннулировать таймеры на событиях resignActive/enterBackground.

Однако я еще этого не сделал, но проверил, что происходит с моим таймером, когда я нажимаю кнопку «Домой», а затем снова захожу в приложение.

У меня в основном есть метод, на мой взгляд, который таймер запускает каждую секунду:

NSLog(@"workedTimTimerTick workedTime; %@", timeString);

И когда я выхожу из приложения, вывод прекращается, когда я повторно захожу в приложение, вывод начинается снова...

Поскольку я ничего не делаю с кодом для таймера этих событий жизненного цикла, почему он перестает вызываться?

Вход приветствуется!


person Mathias    schedule 19.09.2011    source источник


Ответы (1)


Ваше приложение приостанавливается при переходе в фоновый режим (Состояния приложения и переходы).

Ваш таймер не сработает, когда приложение находится в фоновом режиме, и время, проведенное в фоновом режиме, не учитывается для задержки таймера.

person Jilouc    schedule 19.09.2011
comment
Спасибо, чувак, как я тогда и думал. Можете ли вы сказать мне, почему сгенерированные комментарии в xcode говорят, что я должен вручную отключить таймер при resignactive-вызове? Кажется ненужным, если ОС все равно приостанавливает таймер. - person Mathias; 19.09.2011
comment
@Mathias Я предполагаю, что это может быть связано с памятью (таймеры сохраняют свою цель до тех пор, пока не будут запущены или не будут признаны недействительными). Кроме того, его запуск после оставшейся задержки, когда пользователь возвращается, может быть неуместным (особенно после длительного фонового времени). - person Jilouc; 20.09.2011
comment
Да, я так и сделал, но по другой причине:) у меня есть appdelegate, который переключается между тремя представлениями, и я освобождаю старое представление и создаю новое каждый раз при переключении. Я заметил, что представление с таймером не освобождается, если я также не убью таймер, что, конечно, неудивительно. - person Mathias; 20.09.2011