HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios设备上图像的内存管理性能不佳大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下问题:

我有一个主视图对象(继承自UIView),它以4×4布局显示一个包含16个正方形的网格(每个是我创建的继承自UIImageView的类).

这16个正方形中的每一个都是160×160,并且包含不大于30kb的图像(每个正方形的不同图像).但是,图像是500×500(因为它在程序的其他地方以其全尺寸使用),因此通过setFrame方法将其在“square”类中调整为160×160.

通过在应用程序运行时查看Xcode的内存管理功能,我注意到了一些事情:

>每个这些方块,当添加到主视图对象时,将应用程序的内存使用量增加1MB.这不会在实例化时发生,但只有在主视图对象的[self addSubview:square]添加它们时才会发生.
>如果我对所有方块使用相同的图像,则内存增加
最小的.如果我初始化没有任何图像的方形对象,那么
增幅基本为零.
>相同的应用程序,在模拟器中运行时,使用1/6的内存
它在一个实际的设备上.

这里的重点是:为什么每个正方形在加载30kb图像时占用1MB内存?有没有办法减少这个?我尝试过以多种不同的方式创建图像:[UIImage imageNamed:img],[UIImage imageWithContentsFromFile:path],[UIImage imageWithData:imgData scale:scale],以及不调整帧的大小.

解决方法

当您在较小的UIImageView中使用500×500图像时,它仍然会将较大的图像加载到内存中.您可以通过调整UIImage本身(不仅调整UIImageView的框架),制作160×160图像,并在视图中使用该图像来解决此问题.有关调整图像大小的代码,请参阅 this answer,然后可以按如下方式调用它:

UIImage *smallImage = [image scaleImageToSizeAspectFill:CGSizeMake(160,160)];

您甚至可能希望保存已调整大小的图像,因此您不会经常使用每次创建较小图像的计算开销来限制自己,例如:

NSData *data = UIImagePNGRepresentation(smallImage);
[data writeToFile:path atomically:YES];

然后,您可以在将来的视图调用中加载与您的小图像对应的PNG文件.

回答你的问题为什么占用这么多内存,这是因为虽然图像可能存储为持久存储中的压缩JPG或PNG,但我怀疑它在内存中是一个未压缩的位图.有许多内部格式,但常见的是32位格式,每个格式有8位,分别用于红色,绿色,蓝色和alpha.无论具体细节如何,您都可以快速了解500 x 500像素表示,每像素4个字节可以转换为1 MB内存.但160 x 160的图像大小应该是十分之一.

大佬总结

以上是大佬教程为你收集整理的ios设备上图像的内存管理性能不佳全部内容,希望文章能够帮你解决ios设备上图像的内存管理性能不佳所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: