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

时间:2011-08-01 10:45:19

标签: iphone objective-c cocoa-touch nstimer

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

我保留了一个NSTimer,它可以在没有保留的情况下自动失效(因为重复设置为NO)。

我后来说

[_requestTimer invalidate];

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

2 个答案:

答案 0 :(得分:1)

没有失效不会释放你的计时器,你也不需要保留你的NSTimer如果你不需要在创建后处理它,例如如果你不想阻止它被触发,NSTimer就会保留在某个地方在NSRunLoop内负责火力计时器。

答案 1 :(得分:0)

为什么不在你的updateSystems方法中将_requestTimer设置为nil并且不执行retain,然后通过测试_requestTimer == nil你知道你的计时器是否已经被触发(当然,任何发送到nil的消息都被忽略,所以你赢了。 ...)