自动失效失效,但保留定时器



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

我保留了一个NSTimer,如果没有保留,它将自动失效(因为repeats设置为NO)。

我后来说

[_requestTimer invalidate];

虽然这会使计时器失效,因为它会自动执行而不保留,我一直在想自动失效会发生什么?[_requestTimer invalidate];是否释放我保留的引用,以及将自动释放的引用?还是我有内存泄漏?根据分析器,我得到了一个泄漏,但我不知道它是我的保留,自动保留还是分析器没有赶上(这是极不可能的)。

No invalidate不释放你的定时器,你也不需要保留你的NSTimer,如果你不需要在创建后处理它,例如,如果你不想停止它的触发,NSTimer被保留在NSRunLoop的某个地方,它负责触发你的定时器

为什么不只是设置_requestTimer为nil在你的updateSystems方法,不做保留,然后通过测试_requestTimer == nil你知道如果你的计时器已经触发(当然任何消息发送到nil无论如何都会被忽略,所以你赢....)

最新更新