说
_requestTimer = [[NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(updateSystems)
userInfo:nil
repeats:NO] retain];
我保留了一个NSTimer,它可以在没有保留的情况下自动失效(因为重复设置为NO)。
我后来说
[_requestTimer invalidate];
虽然这会使计时器无效,因为它会在没有保留的情况下自动执行,但我一直在想自动失效会发生什么?
[_requestTimer invalidate];
是否会释放我保留的引用以及自动释放的引用?或者我有内存泄漏?
根据剖析器,我得到了泄漏,但我不知道这是我的保留,自动保留还是剖析器没有赶上(这是非常不可能的)。
答案 0 :(得分:1)
没有失效不会释放你的计时器,你也不需要保留你的NSTimer如果你不需要在创建后处理它,例如如果你不想阻止它被触发,NSTimer就会保留在某个地方在NSRunLoop内负责火力计时器。
答案 1 :(得分:0)
为什么不在你的updateSystems方法中将_requestTimer设置为nil并且不执行retain,然后通过测试_requestTimer == nil你知道你的计时器是否已经被触发(当然,任何发送到nil的消息都被忽略,所以你赢了。 ...)