我可以使用contentScaleFactor安全地保存内存吗?

时间:2012-03-06 14:34:36

标签: iphone ios ipad uiview uikit

我有一个应用程序,其中一部分是显示图像网格。 每个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个值?

谢谢!

1 个答案:

答案 0 :(得分:0)

我担心这对很多无济于事。问题是,UIView保留了一个图像,无论其大小如何。因此只要视图存在,图像就占用RAM。 contentScaleFactor并未改变这一事实。为了实际减少内存占用,您必须在将图像分配给UIView之前对其进行重新取样。

但是,contentScaleFactor确实会影响用于呈现的后备存储的大小。鉴于目前只有两类iOS设备,并且这些设备使用1.02.0比例因子,您可以简单地强制contentScaleFactor1.0视网膜设备。请注意,它不会对其他设备执行任何操作。