Давайте поместим здесь ответ, чтобы мы могли закрыть его.
Кажется, что наблюдатели свойств, по-видимому, не работают во время deinit
.Это кажется параллельным с тем фактом, что наблюдатели свойств не работают в течение init
, но, в отличие от последнего, первое, кажется, нигде четко не задокументировано.
Вы может обойти это путем семантического обмана, но не надо!Это похоже на ошибку (и я ее подал).
Исходный вариант использования был не очень хорошим для начала.Скрытие аннулирования таймера в замене звучит как потенциальный кошмар обслуживания.Согласен, что аннулирование и замена идут вместе, как ветчина и яйцо, и я всегда пишу метод, который делает недействительным и заменяет, в этом порядке, и направляет все через этот метод.(Это может быть применено в случае необходимости, но я не буду вдаваться в подробности.) Этот метод может быть вызван во время deinit
.
ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ : смотреть, при использовании таймера, для проблем управления памятью!Вы можете легко попасть в ситуацию, когда deinit
никогда не вызывается , потому что вы сохраняете таймер, но таймер удерживает вас.Затем вам не удастся сделать недействительным таймер, и весь ваш контроллер представления утечет.Вы не жалуетесь на это в своем вопросе, но это связанный вопрос, поэтому я подумал, что лучше пометить его.