Инвалидация при авто-аннулировании, но сохраненный таймер - PullRequest
0 голосов
/ 01 августа 2011

Говоря

_requestTimer = [[NSTimer scheduledTimerWithTimeInterval:3.0 
                                                  target:self
                                                selector:@selector(updateSystems)
                                                userInfo:nil 
                                                  repeats:NO] retain];

Я сохраняю NSTimer, который без сохранения автоматически отменяет действие (поскольку для повторов задано значение NO).

Я потом говорю

[_requestTimer invalidate];

Несмотря на то, что это делает таймер недействительным, как это будет происходить автоматически без сохранения, я продолжаю думать, что происходит с автоматической аннулированием? [_requestTimer invalidate]; освобождает ли мою сохраненную ссылку, а также ссылку, которая автоматически освобождает? Или у меня утечка памяти? Согласно профилировщику, я получаю утечку, но я не знаю, является ли это моим удержанием, автоматическое удержание или профилировщик не догоняют (что было бы крайне маловероятно).

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Нет недействительности не освобождает вас таймер, вам также не нужно сохранять свой NSTimer, если вам не нужно иметь дело с ним после создания, например, если вы не хотите остановить его запуск, NSTimer где-то сохраняетсявнутри NSRunLoop, который отвечает за пожар, звонит ваш таймер.

0 голосов
/ 01 августа 2011

Почему бы просто не установить _requestTimer равным nil в вашем методе updateSystems и не делать сохранение, тогда, протестировав _requestTimer == nil, вы узнаете, сработал ли ваш таймер (и, конечно, любые сообщения, отправленные на nil, в любом случае игнорируются, поэтому вы выигрываете....)

...