Не так много, чтобы продолжать ... но:
@property (nonatomic, retain) NSTimer *timer;
self.timer = [[NSTimer timerWithTimeInterval:kAdsAppearTimeInterval target:self selector:@selector(timerFired:) userInfo:nil repeats:NO] retain];
Это в конечном итоге сохранит таймер 3 раза и один раз.
- Таймер +1 для сохранения
- Таймер +1 за планирование
Таймер +1 для присвоения свойства
self
+1 за цель таймера
Таймер будет сброшен один раз при срабатывании (поскольку он не будет запланирован в цикле выполнения). self
будет выпущен, когда таймер станет недействительным или будет выпущен (вам не о чем беспокоиться).
Таким образом, у вас есть два счетчика удержания для учета. Вызов retain
в приведенном выше коде — это шум; не беспокойтесь, так как присвоение свойства сохранит его.
Остается сохранить собственность. Самый очевидный способ — сбросить таймер в -dealloc.
Однако, если вам не нужно потенциально аннулировать таймер до того, как он сработает, нет причин вообще иметь переменную экземпляра, ссылающуюся на таймер. Даже если у вас есть iVar, нет причин сохранять таймер, пока вы устанавливаете self.timer = nil в методе timerFired:
(и устанавливаете его на nil, если вы где-то аннулируете).
person
bbum
schedule
06.02.2011