【发布时间】:2012-07-22 19:00:45
【问题描述】:
我已经阅读了很多关于内存不足警告崩溃的帖子,但是我无法解决我的应用程序崩溃的问题。仪器的分配显示 2-7MB 的实时字节。它永远不会超过 7 或 7.5MB,但应用程序仍然会崩溃。
我阅读了一些链接,这些链接告诉分配和活动监视器显示不同的内存使用值。如前所述,分配将显示最大 7-7.5MB,但活动监视器显示应用程序启动时大约 75MB 的使用量,当我使用该程序时,它开始增加和减少。它将增加到 110-120MB,然后减少到 75-80MB。
还有一些链接说要查看 VM Tracker 中的脏大小和驻留大小。当我签入 VM Tracker 时,Dirty 大小将从 30MB 开始,并随着我使用该应用程序而开始增加。它超过 400MB。我正在使用大约 150 张图像,其中大约 70-80 张是 1024x1024 尺寸的,大约 35 张是 110x110 尺寸的,其余的是 3000x4000 尺寸的图像。所有这些图像最初都是 png 格式,我已经以编程方式转换为 JPG+ALPHA 并作为资产添加到应用程序中。每当需要加载相应的图像时,我将 JPG+ALPHA 图像分成 16 个部分,最后将它们连接起来得到原始图像。我这样做是因为当我尝试加载分辨率为 3000x4000 的图像时,内存在分配中飙升至 40-45MB,所以使用了这种方法。此方法可确保内存永远不会超过 10MB。
所有这些记录和统计数据都是使用模拟器测量的。
应用程序永远不会在模拟器上崩溃,但它会在真实设备上崩溃。我正在使用 iPad2 进行测试。
请帮我解决这个问题。过去 2 天我被困住了,看到应用程序崩溃完全沮丧。
【问题讨论】:
-
搜索
heapshots,这是分配工具的一个功能。您可以跟踪在特定时间间隔内分配和解除分配的内存。另外,仅供参考,一些图像处理方法使用缓存,例如imageNamed。你也可以试试NSAutoreleasePool,因为内存中同时有很多图片。 -
崩溃日志说什么...?
-
感谢@Templar 的回复。我在任何地方都使用过 NSAutoreleasePool 并且正在使用 initWithContentsOfTheFile 来加载图像的内容。将尝试使用 heapshots 并在此处发布结果。
-
如果由于内存不足警告而崩溃,那么您肯定不会在 viewDidUnload 中设置 nil 某些对象
-
@AnkitSrivastava 崩溃日志显示“被抛弃”。正如我在一些帖子中所读到的,抛弃意味着由于内存不足警告而崩溃。我说的对吗?
标签: iphone ipad memory crash ios-simulator