关于iPhone:自动失效时无效,但保留计时器

Invalidation on auto-invalidation but retained timer

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

我保留了一个NSTimer,它将在不保留的情况下自动失效(因为重复次数设置为NO)。

我稍后再说

1
[_requestTimer invalidate];

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


没有无效不会释放您的计时器,如果在创建后不需要处理它,那么您也不需要保留NSTimer,例如,如果您不想停止其触发,则将NSTimer保留在某个位置在NSRunLoop中负责触发计时器。


为什么不只在updateSystems方法中将_requestTimer设置为nil而不进行保留,然后通过测试_requestTimer == nil来知道计时器是否已触发(当然,发送给nil的任何消息都会被忽略,所以您会获胜。 ...)