2010-02-09 117 views
0

我的視圖控制器發生了一些奇怪的事情。當發佈applicationDidReceiveMemoryWarning時,它會從預計行爲的可見視圖(第二級視圖)以外的堆棧中刪除所有視圖。但是,如果我然後導航回到根視圖,它也有一個返回到自身的後退按鈕。從那裏的應用程序視圖表現非常奇怪的效果,該應用程序是無用的。UIViewController內存警告問題

更奇怪的是完全相同的第二級視圖(沒有內存泄漏)可以正常工作,沒有任何記憶的警告,但有時在應用程序啓動導致內存警告,因此導航的問題。該視圖保留了以前所有相同的控件和數據,但對於設備來說可能零星地處理太多。這與設備啓動時可用的內存有關嗎?這似乎只發生在硬件上。

任何想法?

回答

1

我已經找到了問題 - 這是我的代碼畢竟。

在應用程序啓動我打開我的根視圖控制器,然後在我的根視圖控制器的viewDidLoad方法我告訴它,如果一個條件適用於加載第二個視圖。

當存儲器警告發生時,它離開第二視圖時,然後再次產生第二視圖,同時仍然示出了根查看重現根視圖控制器。

這會導致導航進入精神狀態。

0

我到目前爲止還沒有內存問題的專家。但在這種事情之後的奇怪行爲表明,消除記憶的過程並不一致。也許有些引用仍然存在,應用程序認爲這些引用是有效的引用,但實際上,內存不再分配。內存重新分配也可能導致舊的引用仍然存在,這也可能導致奇怪的行爲。

嗯,我不能在這裏提供很多建議,只有你可以檢查引用未分配區域