2010-12-22 74 views
0

在任何時候運行「分配工具」時,我的iPad應用程序分配的內存少於5MB。我一直非常徹底,並確保一切正確發佈。我的應用程序是一個標籤欄應用程序,可以加載大量圖像,視頻和PDF。我已經確保處理這個適當的和空的緩存等,以釋放內存。奇怪的iPad內存問題

但是,當我運行活動監視器工具時,當我的應用程序在我的iPad上運行時,我的應用程序的內存使用量逐漸增加,最終達到超過100MB並崩潰。

我不太確定該做什麼,並且沒有導致問題的特定代碼塊。整個應用程序是一個記憶豬,我從來沒有遇到過這個問題。

除了分配,我的應用程序會消耗多少內存?是否有另一個工具可以用來追蹤哪些進程正在使用內存?

編輯:正如有人提到,我已經使用構建和分析來確保所有問題都已清理完畢。

+0

您是否在您的項目上嘗試過「構建和分析」?另外......儀器應該告訴你泄漏的位置在哪裏。 – binnyb 2010-12-22 22:04:54

回答

2

很多次CGImages和其他大型媒體blob沒有顯示在分配上 - 它們可能會顯示爲一些小型無辜的對象,但它們指向一些大對象,如使用「怪異」技術分配的圖像像內存映射文件,顯卡存儲器等)。 另一方面,活動監視器工具會根據爲您的應用程序加載的4k頁面查看內存,因此包含這些介質斑點。

我不知道你的緩存方案是什麼。以下是一個場景: 您需要加載50個100k jpegs - 用戶一次只能看到最多3個jpegs。 50個100k圖像是5MB的內存。所以你可以從互聯網上加載jpegs的所有數據。如果你從這個數據中創建了50個CGImages,那麼每一個將消耗(假設jpeg是每個pix = 1000x1000 * 4bytes =)4MB的內存。所以這將是200MB,將它們全部放在內存中。哪個不行。所以你需要保留100k壓縮的nsdata blob,然後在你需要的時候只創建1或3個CGimages。它是一種讓事情保持平穩和平衡的藝術。

在其他工作中:在分配 - 查看您在任何時間的CGImageRefs等的數量,以及低於數字。