在iOS中self.timer = nil vs 之间有什么区别?

任何人都可以解释我self.timer=nil vs [self.timer invalidate]

什么发生在self.timer的内存位置?

在我的代码中

 self.timer=nil 

不停止计时器

 [self.timer invalidate] 

停止计时器。

如果你需要我的代码,我也会更新。

一旦你不需要运行定时器,使定时器对象无效,之后不需要使其引用无效。

这就是苹果文档所说的: NSTimer

一旦计划在运行循环中,计时器会以指定的时间间隔触发,直到失效。 一个非重复的定时器在其触发后立即失效。 但是,对于重复计时器,您必须通过调用其无效方法来使计时器对象无效。 调用此方法请求从当前运行循环中删除定时器; 因此,应始终从安装了计时器的同一线程中调用invalidate方法。 无效的计时器立即禁用它,以便它不再影响运行循环。 然后运行循环会在无效方法返回之前或之后的一些时刻删除定时器(以及它对定时器的强引用)。 一旦无效,定时器对象不能被重用。

首先, invalidateNSTimer类的一种方法,可以用来停止当前运行的定时器。 当你将nil分配给任何对象的时候,在ARC环境中,variables将释放该对象。

当你不再需要时,停止运行定时器很重要,所以我们写[timer invalidate] ,然后写timer = nil; 确保它将从内存中释放它的地址,稍后您可以重新创build计时器。