我有一个应用程序,其中一部分是显示图像网格。
每个ImageView为200x150,但图像本身为1024x768。
如果我尝试仅设置这些图像,很快我会收到内存警告,甚至可能被杀死。
另一方面,如果在代码中调整这些图像的大小会占用大量CPU并占用大量时间。
现在,我观看了“Apple WWDC” session 的视频之一,那里的人提到了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设置为
谢谢!
最佳答案
恐怕不会有太大帮助。事实是,无论大小如何,UIView
都会保留图像。因此,只要存在该视图,该图像就会占用RAM。 contentScaleFactor
不会改变这一事实。为了实际减少内存占用,您必须先对图像重新采样,然后再将它们分配给UIView
。
但是,contentScaleFactor
确实会影响用于渲染的后备存储的大小。鉴于目前只有两种iOS设备,并且这些设备使用1.0
或2.0
比例因子,您只需在视网膜设备上强制contentScaleFactor
为1.0
。请注意,它不会对其他设备执行任何操作。