我有一个应用程序,其中一部分是显示图像网格。 每个ImageView都是200x150,但图像本身是1024x768。 如果我试着设置这些图像,很快就会收到内存警告,甚至可能会被杀死。
另一方面,如果在代码中调整这些图像的大小是非常耗费CPU并且需要花费很多时间。
现在,我观看了一个“Apple WWDC”会话的视频,那里的人提到了UIView的contentScaleFactor,它负责分配显示视图的实际位图内存量。
在文档中,他们只提到比例因子大于1的情况,但我关心的是将其设置为小于1的值:
// Make sure not to divide by zero
if (image.size.width > 0 && image.size.height > 0)
{
CGFloat widthRatio = self.imageView.frame.size.width / image.size.width;
CGFloat heightRatio = self.imageView.frame.size.height / image.size.height;
CGFloat aspectFitRatio = MAX(widthRatio, heightRatio);
aspectFitRatio = MIN(1, aspectFitRatio);
[self.imageView setContentScaleFactor:aspectFitRatio];
}
通过这种方式,我的imageView将分配更少的内存。
我的问题是 - 我是对的吗? 它会真的节省记忆吗? 将contentScaleFactor设置为<甚至是“合法的” 1个值?
谢谢!
答案 0 :(得分:0)
我担心这对很多无济于事。问题是,UIView
保留了一个图像,无论其大小如何。因此只要视图存在,图像就占用RAM。 contentScaleFactor
并未改变这一事实。为了实际减少内存占用,您必须在将图像分配给UIView
之前对其进行重新取样。
但是,contentScaleFactor
确实会影响用于呈现的后备存储的大小。鉴于目前只有两类iOS设备,并且这些设备使用1.0
或2.0
比例因子,您可以简单地强制contentScaleFactor
为1.0
视网膜设备。请注意,它不会对其他设备执行任何操作。