裏面的UIViewController有屬性:UIViewController中的iPhone/iPad的UINavigationController屬性?
@property(nonatomic, readonly, retain) UINavigationController *navigationController
我真的不知道這是怎麼財產使用......當我看到它的樣子,如果你有一個名爲navController導航控制器,並鍵入一些像這樣的代碼:
[navController pushViewController:nextController animated:YES];
發生了幾件事情。第一個nextController被推到navController棧的頂端。其次,navController保留nextController。第三,nextController(navigationController)的只讀屬性用navController初始化。 navController保留nextController,nextController保留navController。這樣做的結果是,如果你釋放navController,它不會被銷燬,因爲它被堆棧中的所有UIViewControllers保留。釋放它的唯一方法是從堆棧中彈出所有項目,然後釋放它。
這是如何所有這些功能,或者我錯過了什麼?
釋放方法被稱爲dealloc方法中釋放,這被稱爲時保留objec計數t是零。所以如果你在navController上調用release,他的保留計數不是零(記得堆棧中的所有UIViewControllers仍然保留它),並且他的dealloc方法沒有被調用。問題是,在navController的dealloc方法中,所有推入的控制器都被釋放(當你釋放它們時,所有navController的retain count都應該爲零,而不是在此之前),但是這種方法從來沒有被調用過。 – MegaManX 2012-02-08 12:11:00
現在我明白了這個問題。但是,當你釋放一個導航控制器時,事情確實很好,並且不會出現泄漏。視圖控制器在導航控制器上保留的保留時間是暫時的,並且只有在導航控制器添加子視圖時。 – Gabriel 2012-02-08 12:51:41
更多相關內容。我已經測試過它,當你推動一個視圖控制器時,你會得到一個遞增的導航控制器的retainCount,但直到該接口循環結束。然後保留計數導航控制器再次恢復其先前的值。所以它不是視圖控制器的真正保留屬性。 – Gabriel 2012-02-08 12:54:58