2011-05-20 109 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中的內存管理以瞭解更多信息。