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]; |
虽然这会使计时器无效,因为它将自动执行而没有保留,但我一直在思考自动无效会发生什么?
根据探查器,我泄漏了,但是我不知道这是我的保留,自动保留还是探查器没有赶上(这是极不可能的)。
没有无效不会释放您的计时器,如果在创建后不需要处理它,那么您也不需要保留NSTimer,例如,如果您不想停止其触发,则将NSTimer保留在某个位置在NSRunLoop中负责触发计时器。
为什么不只在updateSystems方法中将_requestTimer设置为nil而不进行保留,然后通过测试_requestTimer == nil来知道计时器是否已触发(当然,发送给nil的任何消息都会被忽略,所以您会获胜。 ...)