我認爲這可能只是歸結爲我沒有完全理解當應用程序獲得內存警告時應該做的正確事情(或者我不明白iOS發生內存警告時自己做了什麼)。如何保存視圖控制器由於內存警告而被卸載時的狀態?
這裏是我的問題的一個簡化版本:
我有一個RootViewController
。它推動TextViewController
,我有一個UITextField
。 TextViewController
可以推送顯示一些細節的DetailViewController
。
如果我一路推到DetailsViewController
,讓我的導航視圖控制器堆棧[RootVC, TextVC, DetailVC]
,然後模擬內存警告,TextVC
被從內存中自動卸載的iOS。
問題1: iOS只是決定我的視圖控制器應該卸載。當用戶彈出DetailVC
返回到TextVC
,我應該在哪裏保存狀態信息(例如在文本字段中輸入的文本)?現在,文本字段只是回到空白,因爲視圖控制器已卸載然後重新加載。
問題2:當我突然回
TextVC
和挖掘文本字段,我的應用程序崩潰。打開殭屍透露,某些
UIView
從某處發現了一個
responderDidBecomeActive:
消息,當我點擊文本字段。 ARC如何實現這個目標?在我的
viewDidUnload
方法中,我將文本字段設置爲零,甚至將其委託屬性設置爲零。
編輯。
新問題:我只是通過覆蓋
didReceiveMemoryWarning
爲
TextVC
完全解決了所有問題,並且它沒有做任何事情。從1到非常糟糕的規模,這有多糟糕?
EDIT 2 開玩笑,我是個白癡忘了刪除一個通知的觀察者在一個完全不同但相關的代碼。我還是不明白在iOS拋出你的廢話時應如何保存狀態信息。
我還沒有看過新的NDA東西,所以我很高興聽到他們正在解決這個問題。我有一個強大的NSString屬性,我將其設置爲文本字段的值,但是當我觸發內存警告並且視圖被卸載,然後嘗試訪問'viewDidLoad'中的屬性時,它返回到nil。我錯過了什麼...? – 2012-08-17 15:51:20
沒關係,一切工作都應該如此。現在聽起來很愚蠢,但我在iOS開發的幾年中並沒有想到,* view *在這裏被卸載,而不是* view controller *。 – 2012-08-17 16:14:30
我相信筆尖內的所有東西都會被卸載,但現在我正在質疑這一點!對於視圖和視圖中的任何內容!在幾個月內,它的一切都將改變 - 爲了更好! – 2012-08-17 18:28:33