我有一个具有 NSTimer 的类,当我释放它时,是否也会调用 invalidate?或者我可以在 dealloc 中同时执行它们:
- (void)dealloc
{
[_timer invalidate];
[_timer release];
[super dealloc];
}
我在这个线程中读到:
选择的答案说 invalidate 方法也会发布,所以如果我使其无效,我不需要发布它?
谢谢!
我有一个具有 NSTimer 的类,当我释放它时,是否也会调用 invalidate?或者我可以在 dealloc 中同时执行它们:
- (void)dealloc
{
[_timer invalidate];
[_timer release];
[super dealloc];
}
我在这个线程中读到:
选择的答案说 invalidate 方法也会发布,所以如果我使其无效,我不需要发布它?
谢谢!
发送release
到 anNSTimer
不会使其无效。
如果NSTimer
在运行循环中调度,则运行循环保留计时器。因此,即使您释放(计划的)计时器,它的保留计数仍然大于零。此外,它还会继续发射。如果计时器的目标已被释放,则应用程序可能会在计时器触发时崩溃。
当您发送invalidate
到预定的计时器时,运行循环会释放计时器。
如果NSTimer
未在运行循环中安排,则不需要使其无效。但invalidate
无论是已安排、未安排还是已失效,都可以安全地发送到计时器。
invalidate
所以你应该在你的方法中发送你的计时器dealloc
,除非你确定它已经失效了。
如果您使用 创建了计时器[[NSTimer alloc] initWith...]
,那么您还应该释放它。但是,如果您使用[NSTimer timerWith...]
or创建了计时器[NSTimer scheduledTimerWith...]
,则不应释放它,因为您不拥有对它的引用。