2012-05-03 71 views
0

今天,在找到一個討厭的bug之後,我跟蹤了查看控制器的順序, (如果調用了PopToRootNavigationController)。我很震驚。UINavigationController ... PopToRootNavigationController彈出順序.. stange

比方說,我們有3個視圖控制器

A(根)

B 

    C 

如果我們調用PopToRoot上控制器C被從堆棧中移除所述第一控制器是B,B被刪除後,才,控制器C正在被移除。

我的預期完全相反。最後一個被推出的是第一個被彈出的。

有人可以解釋爲什麼蘋果選擇這種行爲?

感謝

+0

請張貼您的代碼。 – Raptor

回答

0

假設你有一個在棧上100個viewcontrollers和要執行

popToRootViewControllerAnimated: 

所以彈出每個視圖控制器一個接一個,直到最後一個視圖控制器是沒有意義的..因爲那麼你期待它釋放每個對象一個接一個,這將需要時間..所以ios做的是,它只是彈出到最後一個視圖控制器,並釋放第二個視圖控制器。所以這種方式一旦釋放第二個,所有後續的子對象也被釋放,因此速度更快(我猜它可以在堆系統上運行)。

凡當你的流行等作爲..

popToViewController:animated: 

此入時視圖控制器,直到指定的視圖控制器是在導航堆棧的頂部。

希望這可以清除一些空氣..

+0

現在更清楚了......謝謝! – Patz

0

如果我沒看錯,這裏的交易:

popToRootViewControllerAnimated: 

入時所有堆疊除了根視圖控制器的視圖控制器,並更新顯示。

popViewControllerAnimated:

入時從導航堆棧頂視圖控制器和更新顯示。 (在你的情況的頂視圖控制器將是C我猜)

希望這是你在找什麼..

相關問題