说我有一个视图控制器。

在我的视图控制器中,我计划每9秒从其他类中调用一个方法:

   redTimer=[NSTimer scheduledTimerWithTimeInterval:9 target:appDelegate.koule selector:@selector(fbWander) userInfo:nil repeats:YES];


我对此有一些疑问。

如果我没有将实例变量redTimer分配给返回的NSTimer,该怎么办。会发生什么?该方法会永远每9秒调用一次吗?

现在,由于我已将redTimer分配给计时器,如果为redTimer分配了另一个计时器(因此不再有任何东西可以引用我的原始计时器),计时器会死掉并停止重复呢?

如果我将其分配给redTimer,然后我的视图控制器被销毁了,那会阻止该方法每9秒调用一次该怎么办?

在这种情况下,计时器及其动作会如何?

谢谢

最佳答案

使用ARC,有人需要始终对对象有强大的引用,否则就将其释放并释放。

对于ScheduledTimerWithTimeInterval:target:selector:userInfo:repeats :,将创建计时器,然后立即将其添加到当前运行循环中。运行循环将其保留。如果重复次数设置为“是”,则计时器保持活动状态。如果计时器设置为repeats = NO,它将保持活动状态直到触发完成为止(直到计时器的选择器执行完毕)。一旦发生这种情况,runloop就会释放它,保留计数下降到零,然后将其释放。

如果计时器在重复,那么它将被运行循环保留,直到您使它无效为止。然后它被释放。

如果将计时器保存到一个强实例变量中,则该实例变量还将维护一个强引用,因此在您取消强引用之前,计时器的引用计数器不会降为零。

10-08 14:57