當我嘗試使用MFMailCompose作爲附件發送圖像(總和大小〜4mb)時,活動監視器說,使用了100(±2)mb的內存。發送或取消內存後釋放~20兆字節,但如果與圖像共享項目被釋放,其餘80兆字節發生了什麼? 謝謝!:)MFMailComposeViewController使用太多的內存
1
A
回答
4
圖像的文件大小和它在顯示時消耗的內存量是兩個完全不同的東西。
壓縮了諸如JPEG和PNG之類的圖像。當它們被拖拽到屏幕上時,它們是未壓縮的。
拇指的快速規則弄清楚多少內存顯示時的圖像會消耗是
memory consumed = (width * height) * 4
實施例,也就是2 KB磁盤上的圖像,但是62 X 52的像素將實際消耗12896字節或12 KB。我想象一個磁盤上4 MB的映像會消耗大於4 MB的空間。
問題是,當您將它們作爲附件添加並因此解壓縮並佔用內存時,MFMailComposer會在它的組合視圖中顯示圖像。所以你的4MB圖像實際上比你想象的要消耗更多。
也許嘗試一次只發送一個圖像。您還需要注意,當您完成這些操作時,您將釋放圖像和MFMailComposeViewController,否則這肯定會成爲泄漏的來源。
另外請注意您最初如何加載圖像。 UIImage
的imageNamed:
方法實際上緩存圖像。緩存的圖像只在內存不足的情況下被清除,所以如果你沒有達到極限,它們可以暫停一段時間。
最後,你已經注意到你看到了Instruments的內存消耗,但是你是否真的證實了它實際上是一個問題?您是否在測試應用程序時由於內存不足而導致應用程序崩潰,而連接到樂器或調試器的是而不是?
沒有身體是完美的 - 這也適用於蘋果。過去有過文檔記載的案例,蘋果的框架顯示內存泄漏(UIImage
的緩存在iOS 2.x中泄露),但當你注意到內存消耗急劇增加時,我不會那麼快責怪框架。如果泄漏儀器沒有顯示任何泄漏,並且分析儀沒有顯示任何問題,最有可能的情況是它只是簡單地消耗內存而不是泄漏。
重要的是要記住,iOS設備沒有像計算機那樣的千兆字節的RAM。你需要保守你使用的記憶。如果這意味着不同時發送XX MB圖像,那就是它必須的方式。
相關問題
- 1. Solr使用太多內存
- 2. SBT使用太多內存
- 3. PHP使用太多內存
- 4. iPhone:多少內存使用量太多?
- 5. 使用太多內存的Hibernate關聯
- 6. curl_multi_exec()使用太多的內存
- 7. Scribble使用太多的內存?
- 8. UIimageView動畫使用的內存太多
- 9. SQLServer使用太多的內存
- 10. itertools產品使用太多的內存
- 11. 使用太多內存的OpenCL程序
- 12. SQL Server CE使用太多的內存
- 13. MongoDB使用的內存太多
- 14. 氣:太多內存引用
- 15. 佔用太多內存 - python
- 16. Java .jar使用太多內存
- 17. JFrame使用方式太多內存
- 18. ExtJS 3. *圖表使用太多內存
- 19. 在C/NDK中使用太多內存?
- 20. 仿真器使用太多內存
- 21. Android Constrain佈局使用太多的內存(RAM)(內存泄漏)
- 22. 分配太多的內存
- 23. Java程序佔用太多的內存
- 24. Sidekiq消耗太多內存
- 25. ObjectInputStream消耗太多內存
- 26. Java消耗太多內存
- 27. 新分配內存太多
- 28. Knockout.js消耗太多內存
- 29. Numpy數組佔用太多內存
- 30. Mongo db佔用太多內存