2012-01-03 58 views
1

如下面的代碼:如果UIViewController在從navigationController彈出時會被放棄?

UIViewController *controller = [[UIViewController alloc] init]; 
[controller.view addSubView:myOtherController.view]; 
[self.navigationController pushViewController:controller]; 
[controller release]; 

而且myOtherController是一個全局對象,它不會被釋放。 所以問題是,當控制器彈出時,它是否會被釋放? 如果它不會被釋放,我該如何驗證? 謝謝!

回答

2

它會在彈出時被釋放。 UINavigationController保留推送視圖控制器,當然,彈出時釋放它們。

編輯:對象所有權是定向關聯 - 但不是樹:對象A擁有對象B,而B可以被任何數量的其他對象所擁有。

彈出的控制器擁有其視圖,反過來,它擁有子視圖。當彈出的控制器被釋放時,它釋放其釋放共享子視圖的視圖。共享的子視圖仍然由其他對象擁有,所以它不會被釋放。

這就是引用計數的思想。

+0

謝謝!但彈出的控制器有一個沒有被釋放的子視圖。我不確定彈出的控制器是否會在這種情況下被釋放。那麼你能進一步解釋嗎?非常感謝你! – wjldxt 2012-01-04 04:43:25

+0

控制器保留它的視圖,保留它的子視圖等。但視圖不保留超視圖或控制器,因此它將被釋放。 – Zoleas 2012-01-04 08:55:43

+0

謝謝你的解釋! – wjldxt 2012-01-05 13:16:18

相關問題