0

我有一个具有 NSTimer 的类,当我释放它时,是否也会调用 invalidate?或者我可以在 dealloc 中同时执行它们:

- (void)dealloc
{
    [_timer invalidate];
    [_timer release];
    [super dealloc];
}

我在这个线程中读到:

invalidate 方法调用也做了一个释放

选择的答案说 invalidate 方法也会发布,所以如果我使其无效,我不需要发布它?

谢谢!

4

1 回答 1

10

发送release到 anNSTimer不会使其无效。

如果NSTimer在运行循环中调度,则运行循环保留计时器。因此,即使您释放(计划的)计时器,它的保留计数仍然大于零。此外,它还会继续发射。如果计时器的目标已被释放,则应用程序可能会在计时器触发时崩溃。

当您发送invalidate到预定的计时器时,运行循环会释放计时器。

如果NSTimer未在运行循环中安排,则不需要使其无效。但invalidate无论是已安排、未安排还是已失效,都可以安全地发送到计时器。

invalidate所以你应该在你的方法中发送你的计时器dealloc,除非你确定它已经失效了。

如果您使用 创建了计时器[[NSTimer alloc] initWith...],那么您还应该释放它。但是,如果您使用[NSTimer timerWith...]or创建了计时器[NSTimer scheduledTimerWith...],则不应释放它,因为您不拥有对它的引用。

于 2012-08-07T06:52:53.353 回答