awakeFromNib和局部变量问题

时间:2011-05-20 05:09:23

标签: iphone cocoa-touch ios core-data

希望我不会因为这个而被责备......

有人可以解释这是如何将managedObjectContext传递给rootViewController的吗?

以下是为iOS核心数据应用程序自动生成的样板代码:

- (void)awakeFromNib
{
    RootViewController *rootViewController = (RootViewController *)    
    [self.navigationController topViewController];
    rootViewController.managedObjectContext = self.managedObjectContext;
}

在此awakeFromNib中,rootViewController是一个局部变量。因此,我认为当方法结束时它将超出范围。我敢打赌它与如何在IB中连接笔尖有关,但我正在寻找更好的解释。如果我注释掉这段代码,应用程序会崩溃,因为它无法找到对象模型。我知道它有效,我想知道它为什么以及如何工作。谢谢!

1 个答案:

答案 0 :(得分:2)

变量rootViewController是一个指向RootViewController类型的指针,是的,它是一个局部变量。但是它指向的RootViewController的对象不在本地范围内。正如您所看到的,您通过询问它的topViewController从navigationController获取指针。该对象由NavigationController对象保留,因此即使在指针超出范围之后它仍然存在。无论如何,这不是Java或C#或C ++。基于引用计数,对象在Objective-C中被释放。

您可能应该更多地了解Objective C中的内存管理,以了解有关此内容的更多信息。