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