Не много, чтобы продолжить ... но:
@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:
методе (и устанавливаете его в ноль, если вы делаете недействительным где-либо).