2011-04-26 61 views
1

當我嘗試使用MFMailCompose作爲附件發送圖像(總和大小〜4mb)時,活動監視器說,使用了100(±2)mb的內存。發送或取消內存後釋放~20兆字節,但如果與圖像共享項目被釋放,其餘80兆字節發生了什麼? 謝謝!:)MFMailComposeViewController使用太多的內存

回答

4

圖像的文件大小和它在顯示時消耗的內存量是兩個完全不同的東西。

壓縮了諸如JPEG和PNG之類的圖像。當它們被拖拽到屏幕上時,它們是未壓縮的。

拇指的快速規則弄清楚多少內存顯示時的圖像會消耗是

memory consumed = (width * height) * 4 

實施例,也就是2 KB磁盤上的圖像,但是62 X 52的像素將實際消耗12896字節或12 KB。我想象一個磁盤上4 MB的映像會消耗大於4 MB的空間。

問題是,當您將它們作爲附件添加並因此解壓縮並佔用內存時,MFMailComposer會在它的組合視圖中顯示圖像。所以你的4MB圖像實際上比你想象的要消耗更多。

也許嘗試一次只發送一個圖像。您還需要注意,當您完成這些操作時,您將釋放圖像和MFMailComposeViewController,否則這肯定會成爲泄漏的來源。

另外請注意您最初如何加載圖像。 UIImageimageNamed:方法實際上緩存圖像。緩存的圖像只在內存不足的情況下被清除,所以如果你沒有達到極限,它們可以暫停一段時間。

最後,你已經注意到你看到了Instruments的內存消耗,但是你是否真的證實了它實際上是一個問題?您是否在測試應用程序時由於內存不足而導致應用程序崩潰,而連接到樂器或調試器的是而不是

沒有身體是完美的 - 這也適用於蘋果。過去有過文檔記載的案例,蘋果的框架顯示內存泄漏(UIImage的緩存在iOS 2.x中泄露),但當你注意到內存消耗急劇增加時,我不會那麼快責怪框架。如果泄漏儀器沒有顯示任何泄漏,並且分析儀沒有顯示任何問題,最有可能的情況是它只是簡單地消耗內存而不是泄漏。

重要的是要記住,iOS設備沒有像計算機那樣的千兆字節的RAM。你需要保守你使用的記憶。如果這意味着不同時發送XX MB圖像,那就是它必須的方式。