2011-07-21 30 views
0

我有一個基於導航的應用程序,我用「init with nib name」推uitableviews。iPhone在實際設備中的內存使用異常

我用儀器測試了應用程序沒有泄漏,並且在所有分配菜單中我看到了大約2-3 MB的活動字節。當我開始瀏覽並瀏覽30頁時,在樂器中,我可以從「實時字節」中看到它爲每個推送的uitableview增加了大約40 KB,我認爲這很正常。

然後,我想在我的IOS4手機和我在應用商店中找到的免費活動監視器應用程序中進行測試。那麼,我可以看到,在每次推動中,設備中的總空閒內存在800KB左右都會減少!

所以在30個推動28 MB的空閒內存不見了,當我通過導航「返回」,然後我可以看到內存得到釋放。

我可以張貼一些代碼,如果你想,但我無法找到什麼可能需要在我的uitableView 800Kb內存,所有的分配被釋放,我不分配任何圖像文件。我只是發送幾行信息在表格中顯示。

你的建議是什麼?哪些部分應該檢查mycode?或者這是正常的,推送的視圖可以佔用內存的KB。因爲如果在我的應用程序100頁那麼它可以長到100 MB的內存

感謝

回答

2

我敢肯定,如果你使用「存儲工具」檢查在儀器內存(見圖片) ,您將看到與使用免費iphone應用程序所看到的相同的內存使用情況。實際上,根據您使用的工具,儀器會給您不同的內存使用信息,這是我的經驗;不幸的是,記憶工具是一種能夠提供最「現實」估計的工具。我無法解釋爲什麼,但對於幾MB的「實時字節」,你有更多的「真實存儲器」MB並不奇怪。

無論如何,我不會擔心它。如果你達到了28MB並且應用程序沒有被殺死,那麼你可能會使用「更新的」設備(而不是iPod touch或iPhone 3)。我猜如果你在老設備上測試過,整個內存佔用可能會更低(即你的應用程序會得到更多的內存警告,如果一切正常,更多的視圖將被卸載釋放更多的內存)。

什麼是重要的,國際海事組織,是當你回去時,內存恢復。理想情況下,它應該完全恢復,但這並非總是容易實現。

enter image description here

關於您的應用程序的總體內存消耗,我的想法是:

  1. 首先,你應該檢查,當你的應用程序得到一個內存警告會發生什麼;我預計很多以前加載的視圖將被卸載並恢復內存;您可以在控制器中覆蓋didReceiveMemoryWarning以記錄它們被卸載(不要忘記撥打super)並在需要時恢復內存(系統會知道它何時執行);正如我所說,我認爲你的應用程序正在填滿內存,因爲它沒有收到任何內存警告,重點是接收到內存警告時會發生什麼;如果內存恢復,那麼沒問題;問題是當你收到警告並且記憶不會顯着減少時;

  2. 如果問題仍然存在(即,,內存恢復機制無法正常工作),在推送新控制器之前,您可以考慮使用導航控制器中的視圖控制器popping。你可以試試,如果這對你的作品...

+0

TNX但這是一個問卷應用程序,可以有高達幾百長文本的問題,所以我的應用程序將成長的記憶80-100 MB?這可以接受嗎?或者什麼可以修復我的代碼,也許我犯了一個錯誤,因爲我是初學者? – Spring

+1

請看,我的編輯... – sergio

+0

tnx我把一些警報didreceivememorywarning和didunloadview。並在真實設備上進行測試,當我瀏覽深度內存時,內存使用量可達150 MB!但我沒有收到任何警告? – Spring