2

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

[NSTimer scheduledTimerWithTimeInterval:7.0 target:self selector:@selector(doSomethingOnce) userInfo:nil repeats:NO];

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

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

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

4

2 回答 2

5
于 2013-06-03T23:54:25.620 回答
3

您应该将计时器分配给一个变量,然后在您的视图控制器的viewWillDisappear(或viewDidDisappear可能的)方法中,您可以显式地使计时器无效并将变量重新分配为零。由于您无论如何都不希望此计时器重复,您可能还希望在doSomething方法结束时将计时器分配为 nil。

计时器保留其目标的事实将阻止您的视图控制器在七秒结束之前被释放,但不会阻止视图控制器获得通常的外观相关消息。

例如,您可能会执行以下操作:

_doSomethingTimer = [NSTimer scheduledTimerWithTimeInterval:7.0 target:self selector:@selector(doSomethingOnce) userInfo:nil repeats:NO];
// The rest of whatever method this is in.
…

- (void)viewWillDisappear:(BOOL)animated {
    [_doSomethingTimer invalidate];
    _doSomethingTimer = nil;
}
于 2013-06-03T23:59:55.347 回答