我需要使计时器无效/释放计时器吗?

Seb*_*rth 2 memory multithreading memory-management nstimer ios

在我的一个视图控制器代码中,我有这一行:

[NSTimer scheduledTimerWithTimeInterval:7.0 target:self selector:@selector(doSomethingOnce) userInfo:nil repeats:NO];
Run Code Online (Sandbox Code Playgroud)

它在7秒后被调用并执行某些操作...(我没有将计时器分配给变量或属性)

如果在7秒钟结束之前释放视图控制器,会发生什么情况?

我是否必须在某个时候释放计时器和/或使计时器无效(即在dealloc中)?

Rob*_*ier 5

这种计时器仅由运行循环保留。由于您没有指向它的指针,因此无法invalidate。它还将保留其目标(self),因此无法self在计时器触发之前取消分配。触发后,运行循环将释放它,因此它将释放,导致释放self,并允许该对象释放(假设上面没有其他保留)。

在大多数情况下,我不建议忽略from的返回值, scheduledTimerWithTimeInterval:…因为它使您无法invalidate使用计时器。但是,如果该行为正是您想要的(有时在AppDelegate中创建的全局计时器中),那么它将在没有其他代码的情况下正常工作。