当我尝试使用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. PHP使用太多内存
- 2. Solr使用太多内存
- 3. SBT使用太多内存
- 4. iPhone:多少内存使用量太多?
- 5. curl_multi_exec()使用太多的内存
- 6. UIimageView动画使用的内存太多
- 7. Scribble使用太多的内存?
- 8. MongoDB使用的内存太多
- 9. itertools产品使用太多的内存
- 10. 使用太多内存的OpenCL程序
- 11. 气:太多内存引用
- 12. 在C/NDK中使用太多内存?
- 13. Java .jar使用太多内存
- 14. 仿真器使用太多内存
- 15. Android Constrain布局使用太多的内存(RAM)(内存泄漏)
- 16. Java程序占用太多的内存
- 17. Sidekiq消耗太多内存
- 18. Java消耗太多内存
- 19. 图像占用太多内存
- 20. PHP阵列占用太多内存
- 21. STL向量占用太多内存
- 22. PHP-FPM占用太多内存
- 23. Java图像占用太多内存
- 24. 日志会话占用太多内存
- 25. Numpy数组占用太多内存
- 26. Mongo db占用太多内存
- 27. 使用太多内存的C#应用程序
- 28. 熊猫'外'合并多个csvs使用太多内存
- 29. SceneKit:太多内存持续存在
- 30. 我的PHP嵌套循环使用太多的内存