gpt4 book ai didi

ios - 带有 ARC 的 NSTimers 的生命周期

转载 作者:行者123 更新时间:2023-11-28 22:14:23 29 4
gpt4 key购买 nike

假设我有一个 View Controller 。

在我的 View Controller 中,我安排每 9 秒从其他类调用一个方法:

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

我有几个问题。

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

现在,因为我已经将 redTimer 分配给了计时器,如果为 redTimer 分配了一个不同的计时器(因此没有任何东西会再引用我的原始计时器)会发生什么,计时器会死掉并停止重复吗?

如果我将它分配给 redTimer,然后我的 View Controller 被销毁会怎样...这会阻止该方法每 9 秒被调用一次吗?

在这些情况下,计时器及其 Action 会发生什么情况?

谢谢

最佳答案

使用 ARC,有人需要始终拥有对对象的强引用,否则它会被释放和释放。

在 scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 的情况下,计时器被创建,然后立即添加到当前运行循环。 runloop 保留它。如果 repeats 设置为 YES,则计时器保持事件状态。如果定时器设置为 repeats=NO,它会一直保持事件状态直到完成触发(直到定时器的选择器完成执行)。一旦发生这种情况,runloop 就会释放它,它的保留计数会降为零,并且会被释放。

如果定时器在重复,那么它会被 runloop 保留,直到你使它无效。然后它被释放。

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

关于ios - 带有 ARC 的 NSTimers 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22085283/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com