希望我不会因为这个而被责备......
有人可以解释这是如何将managedObjectContext传递给rootViewController的吗?
以下是为iOS核心数据应用程序自动生成的样板代码:
- (void)awakeFromNib
{
RootViewController *rootViewController = (RootViewController *)
[self.navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
}
在此awakeFromNib
中,rootViewController
是一个局部变量。因此,我认为当方法结束时它将超出范围。我敢打赌它与如何在IB中连接笔尖有关,但我正在寻找更好的解释。如果我注释掉这段代码,应用程序会崩溃,因为它无法找到对象模型。我知道它有效,我想知道它为什么以及如何工作。谢谢!
答案 0 :(得分:2)
变量rootViewController是一个指向RootViewController类型的指针,是的,它是一个局部变量。但是它指向的RootViewController的对象不在本地范围内。正如您所看到的,您通过询问它的topViewController从navigationController获取指针。该对象由NavigationController对象保留,因此即使在指针超出范围之后它仍然存在。无论如何,这不是Java或C#或C ++。基于引用计数,对象在Objective-C中被释放。
您可能应该更多地了解Objective C中的内存管理,以了解有关此内容的更多信息。