hzx*_*zxu 0 objective-c nstimer nsrunloop ios
我有一个有NSTimer的类,当我发布它时,也会失效吗?或者我可以在dealloc中执行它们:
- (void)dealloc
{
[_timer invalidate];
[_timer release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
我在这个帖子中读到:
选择的答案说invalidate方法也会释放,所以如果我使它失效,我不需要释放它?
谢谢!
rob*_*off 10
发送release到NSTimer不会使它失效.
如果NSTimer在运行循环中调度,则运行循环保留计时器.因此,即使您释放(计划的)计时器,它仍然具有大于零的保留计数.此外,它将继续射击.如果计时器的目标已被解除分配,则应用程序可能会在计时器触发时崩溃.
当您发送invalidate到计划的计时器时,运行循环释放计时器.
如果NSTimer未在运行循环中调度,则不需要使其无效.但是发送invalidate到计时器是安全的,无论是计划的,未计划的,还是已经无效的.
所以你应该invalidate用你的dealloc方法发送你的计时器,除非你确定它已经失效了.
如果您使用创建计时器[[NSTimer alloc] initWith...],那么您也应该释放它.但是如果您使用[NSTimer timerWith...]或创建了计时器[NSTimer scheduledTimerWith...],则不应该释放它,因为您没有对它的引用.
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |