我有一个带有HTML的UIWebKit,这个HTML有几个图像和文本,但只是显示它给了我内存警告。所以我做了一些测试: 相同的HTML具有不同的图像,全尺寸和相同的图像,但从原始尺寸缩小了50%,对于50%缩小的图像,我去预览并减少了50%的所有图像
令人惊讶的部分是50%测试,你可以看到即使有16个图像,内存峰值也是4.90MB。这真的很令人惊讶。 请注意,这些值并不总是相同,它们会发生变化,但测试之间没有太大差异。
在50%的问题中,在8和16张图像中,虽然内存较低,但有时会出现内存警告,但与全尺寸图像相比,性能提升明显
滚动所有文章后,静止=内存
1 Image = [静止不动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 Image = [静止不动3.2MB] [旋转3.67MB]
2 Image = [静止不动3.2MB] [旋转3.70MB]
3 Image = [静止不动3.3MB] [旋转3.79MB]
4 Image = [静止不动3.3MB] [旋转3.80MB]
8张图片= [静止不动4.29MB] [旋转4,63MB](有时会崩溃)
16张图片= [静止不动4.79MB] [旋转4,90MB](有时会崩溃)
我的问题是:应用程序有时会丢失16张小图片。为什么?记忆要低得多。
内存使用的限制是什么?50%尺寸图像的最大值似乎不同。 13.2MB适用于大图像,3.8适用于小图像。任何更高的东西有时会崩溃。这毫无意义。
谢谢
答案 0 :(得分:2)
如果您发布了正在发生的崩溃日志会有所帮助,因为崩溃很可能与您的内存消耗无关,也与您处理内存的方式无关。是的,您的图像大小可能会严重影响问题,因为每个图像使用的实际内存量根据以下公式确定:
w * h * 4
当然,假设图像是32位彩色图像,其中w
是图像的宽度(以像素为单位),h
是图像的高度(以像素为单位)。因此,1024x1024 32位彩色图像将使用大约4.2 MB的内存,而512x512 32位彩色图像将使用1兆。
您的崩溃报告将会告诉您。同样在对象分配和泄漏工具下运行工具可能具有极大的洞察力(在侧窗格可见的情况下运行,它将显示您找到的任何泄漏的调用堆栈)。另请注意,如果您发现泄漏指向CIOImage之类的东西,这可能是最终发生泄漏的地方,但泄漏发生的地方几乎肯定会出现在您的代码中。
此外,在运行Instruments时,请记住将其附加到设备上运行的应用程序中;在这样的情况下,不要采用sim所说的面值。