释放还是自动释放?

时间:2010-11-11 19:44:11

标签: iphone objective-c cocoa memory

我应该为varSecondViewController使用release或autorelease吗?

-(IBAction)takeNextStep: (id) sender
{
    SecondViewController *varSecondViewController = [[SecondViewController alloc]     
       initWithNibName:@"SecondViewController" bundle:nil];
    [self.navigationController pushViewController:varSecondViewController animated:YES];
    [varSecondViewController release];
}

3 个答案:

答案 0 :(得分:12)

我的经验法则:

如果您要使用它,然后不再需要它的引用,发布它,

如果您要将其传递给调用者(即返回), autorelease

答案 1 :(得分:6)

autorelease只是一个release延迟到将来的某个时间,除非调用者创建了自己的自动释放池,否则保证至少是当前的调用堆栈。当您需要释放对象以遵循内存管理准则时,通常会使用它,但在调用堆栈中可能仍需要该对象。在这种情况下,您不会返回视图控制器,也无意再直接保持它,因此不需要延迟。你可以release

答案 2 :(得分:4)

在这种情况下,release最有意义。