Делать NSTimer недействительным? - PullRequest
1 голос
/ 17 августа 2010

Если у меня есть NSTimer, который запускается в viewdidload, где находится подходящее место для его аннулирования при выходе из этого представления? Нужно ли также выпустить его?

1 Ответ

5 голосов
/ 17 августа 2010

Если вы создаете таймер с помощью NSTimer scheduleTimerWithTimeInterval ... тогда вам не нужно освобождать его, поскольку вы не являетесь его владельцем.

Теперь важно то, что класс timer сохраняет цель, и в большинстве случаев мы используем self в качестве цели.Если таймер не повторяется, то после завершения обработки таймера он автоматически становится недействительным и цель освобождается.Так что тебе нечего делать.Но если ваш таймер все еще находится в ожидании при выходе из вида (это происходит, если вы уйдете до того, как таймер сработает или таймер будет повторяться), то вам нужно его отключить.Место НЕ ДОЛЖНО быть методом dealloc.Поскольку сам таймер сохраняет цель, dealloc не будет вызываться до тех пор, пока таймер не станет недействительным.

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

...