2011-03-16 36 views
2

我正在開發一款RSS閱讀器類型的iPhone應用程序,它即將完成,但是我昨天升級到iOS 4.3的Xcode 4,並且遇到了一些嚴重的內存問題。我的應用程序現在經常會收到內存警告,我正在處理didReceiveMemoryWarning並釋放所有緩存的圖像等,但這不能提供良好的用戶體驗。我也一直在使用儀器來試圖診斷問題,但是這提出了更多的問題,然後回答。iPhone上的內存管理/儀器

•SDK 4.3是否使用更多內存?在升級之前,我沒有收到內存警告。不知道這是否相關,但我正在使用iOS 4.2的iPhone 3G進行大部分測試(4.3不支持3G)。

•爲什麼分配工具工具活動字節列與活動監視器工具中的實際內存列不匹配?活動監視工具始終報告更多的內存使用情況。

•根據泄漏我的應用程序不會泄漏內存,在模擬器或實際的iPhone上,但是當我查看分配時,似乎隨着我在視圖之間切換並彈出視圖,實時字節列不會返回到它以前的值,這與泄漏內存一致? (彈出後是發佈子視圖)

•我的應用程序經常在啓動時報告內存警告,但僅當我用泄漏分析應用程序時。泄漏是否會導致額外的內存開銷?

•也許這是一個難以回答的問題,但是iPhone應用程序的合理內存佔用量是多少?當我運行泄漏時,我的應用程序幾乎肯定會因爲運行幾分鐘內存不足而被殺死,但是在泄漏工具報告中,當應用程序終止時,我使用的分配不到2 MB。

•爲什麼活動監視器工具有虛擬內存列?我讀過的所有內容都指出iPhone不使用虛擬內存?

+0

一般而言,除非問題緊密交織,否則應該將一組問題分解爲單個問題。這有助於提高網站的可搜索性和可用性。 – 2011-03-16 19:27:38

回答

0

4.3 SDK可能會使用更多的內存,但是如果這是一個問題,那麼您可能會遇到錯誤的軌道,因爲作爲開發人員不應考慮您的應用程序的穩定性。

我不擔心分配報告和活動監視器報告之間的差異。隨着視圖被推送和彈出,而不是縮小,內存佔用也不會增加。 how free(3) works上的另一個答案更詳細地解釋了這種現象。

iOS應用程序的合理內存佔用量是您的應用程序運行所需的最低量。

iOS確實使用虛擬內存。從蘋果公司的內存使用性能指南/ About the Virtual Memory System

在Mac OS X和iOS提供了一個完全集成的虛擬內存系統,你不能關閉;它總是在。這兩個系統還爲每個32位進程提供高達4千兆字節的可尋址空間。

...

雖然Mac OS X支持後備存儲,但iOS不支持。在iPhone應用程序中,已經在磁盤上的只讀數據(例如代碼頁)只是從內存中刪除並根據需要從磁盤重新加載。操作系統永遠不會將可寫數據從內存中刪除。相反,如果可用內存的數量下降到某個閾值以下,系統會要求正在運行的應用程序自動釋放內存以爲新數據騰出空間。未能釋放足夠內存的應用程序被終止。

我建議您通讀整篇文檔,尤其是Finding Memory Leaks。您還可以使用Build-and-Analyze功能,該功能使用內置的Clang來靜態檢測幾種錯誤,包括內存泄漏。