iPad接收内存警告,内存使用率低

Fer*_*Fer 8 memory memory-management uiwebview ipad

我有一个带有HTML的UIWebKit,这个HTML有几个图像和文本,但只是显示它给了我内存警告.所以我做了一些测试:相同的HTML具有不同的图像,全尺寸,并且在相同的图像之后但从原始尺寸缩小了50%,对于50%缩小的图像,我去预览并将所有图像缩小到50%

令人惊讶的部分是50%的测试,你可以看到即使有16个图像,内存峰值也是4.90MB.这真的很令人惊讶.请注意,这些值并不总是相同,它们会发生变化但测试之间没有太大差异.

在50%的问题中,在8和16张图像中,尽管内存较低,但有时会出现内存警告,但与全尺寸图像相比,性能提升显着

滚动所有文章后静止=记忆

1图片= [静止不动5MB] [旋转5.6MB]

2张图片= [静止不动6.99MB] [旋转7.7MB]

3张图片= [静止不动9.04MB] [旋转10.9MB]

4张图像= [静止不动10.89MB] [旋转13.20MB]

8张图像= [静止不动23.14MB] [旋转25.20MB](有时会崩溃)

16张图片= [静止不动27.14MB和app崩溃]

50%

1图片= [静止不动3.2MB] [旋转3.67MB]

2图片= [静止不动3.2MB] [旋转3.70MB]

3图像= [静止不动3.3MB] [旋转3.79MB]

4图像= [静止不动3.3MB] [旋转3.80MB]

8张图像= [静止不动4.29MB] [旋转4,63MB](有时会崩溃)

16张图像= [静止不动4.79MB] [旋转4,90MB](有时会崩溃)

我的问题是:该应用程序有时会崩溃16个小图像.为什么?记忆力要低得多.

内存使用的限制是什么?50%大小的图像最大值似乎不同.13.2MB适用于大图像,3.8适用于小图像.任何更高的东西有时会崩溃.这是没有意义的.

谢谢

jer*_*jer 2

如果您发布了正在发生的情况的崩溃日志,这将会有所帮助,因为崩溃很可能与您的内存消耗相关,而不是与您处理内存的方式相关。是的,您的图像大小可能会加剧问题,因为每个图像使用的实际内存量是根据以下公式确定大小的:

w * h * 4
Run Code Online (Sandbox Code Playgroud)

当然,假设图像是 32 位彩色图像,其中w是图像的宽度(以像素为单位),h是图像的高度(以像素为单位)。因此,1024x1024 32 位彩色图像将使用大约 4.2 MB 内存,而 512x512 32 位彩色图像将使用 1 meg。

你的崩溃报告将会说明一切。另外,在 Instruments 中的对象分配和泄漏工具下运行可能会带来巨大的洞察力(在侧窗格可见的情况下运行,它将显示您发现的任何泄漏的调用堆栈)。另请注意,如果您确实发现指向 CIOImage 之类的泄漏,那么这可能是泄漏最终发生的地方,但泄漏发生的地方几乎肯定是在您的代码中。

另外,运行 Instruments 时,请记住将其附加到设备上运行的应用程序中运行;在这种情况下,不要相信模拟市民所说的任何话。