Как упоминалось выше, таймеры сохраняют свои цели. Пока таймер не станет недействительным, между таймером и представлением будет цикл сохранения, поэтому представление не будет освобождено.
Я бы объявил недействительным таймер, когда он был удален из иерархии представлений с помощью подкласса didMoveToSuperview
, он вызывается системой при наличии изменений, связанных с представлением (например, изменения суперпредставления). 'RemoveFromSuperview' вызывается только тогда, когда removeFromSuperview
вызывается в UIView
- (void)didMoveToSuperview
{
[super didMoveToSuperview];
if (!self.superview)
{
[timer invalidate];
timer = nil;
}
}