簡體   English   中英

在執行Push Segue時是否應該釋放UIViewController

[英]Should a UIViewController be deallocated when it performs a Push Segue

我有一個LoginViewController(UIViewController),當滿足所有條件並且用戶單擊“登錄”按鈕時,將運行一個情節提要腳本,以推送ProfileViewController(UIViewController)。 發生這種情況時,我在LoginViewController的dealloc方法中有一條日志語句,以查看是否調用了該語句,但令我失望的是,它從未調用過。 我的問題是是否應該調用它? 另外,當我登錄時,有時會收到“收到的內存警告”,有時卻不會,因為我在兩種情況下都采取了完全相同的步驟,但是一次卻又一次卻沒有收到內存警告。

任何人都可以在此上發光一下,這太棒了!

謝謝。

UINavigationController維護一堆視圖控制器。 您從該堆棧上的一個元素LoginViewController開始。 當您推送ProfileViewController ,現在在堆棧上有兩個元素。 在從堆棧中刪除LoginViewController之前,無法對其進行釋放。

如果希望ProfileViewController替換導航控制器堆棧上的LoginViewController ,則可以編寫一個自定義segue類來實現該行為。 請參閱此問答

(您可能會認為可以在情節UISplitViewController使用“替換”或“顯示詳細信息(例如,替換)” segue類型,但這些類型僅在使用UISplitViewController 。)

啟用ARC后,當不引用對象時,它將被釋放。

為了顯示ProfileViewController視圖,您可以在LoginViewController實例化該對象的一個​​對象,這就是在顯示配置文件視圖后仍然可以看到它的方式。 如果釋放LoginViewController實例,則配置文件視圖也將被釋放(假設沒有其他人引用它)。 出於相同的原因, LoginViewController實例不會被釋放,因為另一個對象持有對該實例的引用。 說你的意見中提出Window - > ProfileViewController - > ProfileViewController ,那就是保持ProfileViewController情況下被釋放的窗口。

如果您到目前為止有兩個假設,則內存警告應該來自其他地方。 有兩種視圖不能引起問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM