2011-05-20 47 views
1

希望我不要让她斥责这一个...awakeFromNib和局部变量的问题

有人能解释这是如何传递managedObjectContext到RootViewController的?

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

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

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

回答

2

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

您应该更多地了解目标C中的内存管理以了解更多信息。