2013-03-28 73 views
1

我正在使用一個相當複雜的故事板的iPad應用程序。我的工作流程如下收集視圖推送另一個視圖,該視圖以模態方式呈現另一個視圖。iPad,iOS6 viewWIllAppear和視圖之間很長的延遲出現在屏幕上

以模態方式呈現的第三個視圖相當複雜,有19個子視圖,其中一些是圖像視圖。該應用程序做了很多工作來組織viewDidLoad中的視圖層次結構。 viewWillAppear或viewDidAppear中沒有其他內容。

令我困惑的是,如果我把日誌語句放在viewDidLoad中,我發現viewDidLoad在用戶啓動storyboard segue的1.5秒內完成。然後viewWillAppear被調用。 之後,屏幕坐在那裏3至80(是的,八十!)秒。有時候,視圖看起來比較快,有時需要很長時間。

這是我的viewDidLoad佔用太多內存的症狀嗎?換句話說,是因爲iOS清理了足夠的內存使我的視圖出現了嗎?

打在Xcode停止按鈕後,我重新啓動應用程序,執行的步驟,以目前的視圖控制器的序列中,這是第一個跑:

/

/80 seconds! 
    2013-03-27 22:56:30.311 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear 
    2013-03-27 22:57:50.351 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear 

//after popping the view controller and repeating: 
//less than 2 seconds 
2013-03-27 22:59:23.698 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear 
2013-03-27 22:59:24.306 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear 

更新:在開啓後設備關閉,然後再次啓動,視圖控制器顯示速度非常快,在第一次運行時再次少於2秒。這是推送/彈出控制器4次後的分配分析。

enter image description here

這是一個內存釋放問題?

回答

1

剖析應用程序後,我想通了,兩個問題在起作用:

1)我節省大量UIImages作爲binarydata到coredata,如果使用NSFetchedResultsControllers這不應該做的,因爲他們拉出所有的圖像數據並保存在內存中。

2)iOS6改變了viewDidUnload的工作方式 - 它永遠不會被調用,所以我添加了一些調用,以便在視圖控制器消失時手動釋放對象。

最終的結果是,內存佔用量現在在基線4mb左右,隨着我推動以前違規的控制器而變得更高。另外,我可以在無內存崩潰的情況下多次推/控制控制器。

enter image description here

相關問題