Наилучшее время для лишения законной силы NSTimer в UIViewController для предотвращения сохраняет цикл

Кто-либо знает, когда наилучшее время должно остановить NSTimer, который сохранен, ссылка в UIViewController для предотвращения сохраняют цикл между таймером и контроллером?

Вот вопрос более подробно: у Меня есть NSTimer в UIViewController.

Во время ViewDidLoad контроллера представления я запускаю таймер:

statusTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateStatus) userInfo: nil repeats: YES];

Вышеупомянутые причины таймер для содержания ссылки на контроллер представления.

Теперь я хочу выпустить свой контроллер (родительский контроллер выпускает его, например),

вопрос: куда я могу поместить вызов в [statusTimer, делают недействительным], чтобы вынудить таймер выпустить ссылку на контроллер?

Я пытался поместить его в ViewDidUnload, но это не становится запущенным, пока представление не получает предупреждение памяти, таким образом, не хорошее место. Я попробовал dealloc, но dealloc никогда не будут называть, пока таймер жив (курица и проблема яйца).

Какие-либо хорошие предложения?

33
задан MyCSharpCorner 13 August 2010 в 15:28
поделиться

3 ответа

Возможно, вы ищете метод -viewDidDisappear . Он вызывается всякий раз, когда представление скрыто или закрыто.

1
ответ дан 27 November 2019 в 19:30
поделиться

Вы можете попробовать с - (void) viewDidDisappear: (BOOL) animated , а затем вам нужно снова проверить его в - (void) viewDidAppear: (BOOL) анимированные

Подробнее здесь

3
ответ дан 27 November 2019 в 19:30
поделиться

Именно по этой причине я написал класс "слабых ссылок". Он является подклассом NSObject, но перенаправляет все методы, которые NSObject не поддерживает, целевому объекту. Таймер сохраняет weakref, но weakref не сохраняет свою цель, поэтому цикла сохранения нет.

Цель вызывает [weakref clear] и [timer invalidate] или около того в процессе освобождения. Ики, не так ли?

(Следующее очевидное дело - написать свой собственный класс таймера, который сделает все это за вас.)

0
ответ дан 27 November 2019 в 19:30
поделиться