iPhone App占用了太多内存

时间:2010-05-09 21:28:49

标签: iphone image optimization memory

好的,所以这是我的问题。我的iPhone应用程序在磁盘上是1.2MB。当然,我有一堆用于GUI按钮和背景等的图像。在内存中,我的应用占用了15MB!

这意味着如果我用相机拍照,默认为8MB,即使在选择器调用其代表之前,它也会发出内存警告(几个)!

我怎么知道是什么抓住了这么多内存,以及如何删除它?我删除了所有调试符号并添加了[-Os],但它仍占用了大量内存!

---编辑---

我的应用程序在strongfortressgames.weebly.com上升 - 应用程序“Thunderclash”占用15 MB!这是一个愚蠢的小应用程序!我怎样才能让这些更小?

2 个答案:

答案 0 :(得分:2)

内存警告唯一不好的是,如果没有内存可以释放。然后它们变成内存故障并且应用程序终止。

将png和jpg等压缩图像加载到内存后,它们会被解压缩,并且通常占用10倍的大小。使用[UIImage imageNamed:]时,它会将图像缓存在内存中。这是由xib加载的任何图像隐含的。当它收到内存警告时,它会在缓存中释放图像。

您拥有的非图像视图可能会将渲染内容缓存在内存中。收到内存警告时,除非当前显示高速缓存,否则将清除高速缓存。整个视图层次结构也可能由当前未显示的视图控制器发布。

内存警告是应用程序运行时的正常部分。它们不表示内存泄漏。他们只是告诉你和系统应该释放空闲内存。

虽然在没有内存警告的情况下运行可能是一个令人钦佩的目标,但您通常需要分配内存,除非其他内容需要,否则保持内存会更有效。从内存缓存中清除映像时,必须在下次从磁盘读取该映像。

如果您知道的图片只需要一次或很少需要,您可以通过除[UIImage imageNamed:]之外的电话加载它以避免缓存。例如,仅在应用程序启动时加载的辅助启动画面。

答案 1 :(得分:0)

好的,如果您的应用在磁盘/购物车上不是很大,这意味着您的应用内部会有一些非常大的内存分配。在memAlloc / new()函数上放置一个中断或日志跟踪器,看看是什么在占用你的空间。解压缩的大型GUI组件可能是非常大的缓冲声音文件的罪魁祸首。但是,如果没有该日志跟踪,我们只能猜测。转而来源。