在iOS中self.timer = nil vs 之间有什么区别?
任何人都可以解释我self.timer=nil
vs [self.timer invalidate]
?
什么发生在self.timer
的内存位置?
在我的代码中
self.timer=nil
不停止计时器
[self.timer invalidate]
停止计时器。
如果你需要我的代码,我也会更新。
一旦你不需要运行定时器,使定时器对象无效,之后不需要使其引用无效。
这就是苹果文档所说的: NSTimer
一旦计划在运行循环中,计时器会以指定的时间间隔触发,直到失效。 一个非重复的定时器在其触发后立即失效。 但是,对于重复计时器,您必须通过调用其无效方法来使计时器对象无效。 调用此方法请求从当前运行循环中删除定时器; 因此,应始终从安装了计时器的同一线程中调用invalidate方法。 无效的计时器立即禁用它,以便它不再影响运行循环。 然后运行循环会在无效方法返回之前或之后的一些时刻删除定时器(以及它对定时器的强引用)。 一旦无效,定时器对象不能被重用。
首先, invalidate
是NSTimer
类的一种方法,可以用来停止当前运行的定时器。 当你将nil
分配给任何对象的时候,在ARC环境中,variables将释放该对象。
当你不再需要时,停止运行定时器很重要,所以我们写[timer invalidate]
,然后写timer = nil;
确保它将从内存中释放它的地址,稍后您可以重新创build计时器。