【发布时间】:2015-03-05 21:23:19
【问题描述】:
我知道加载这样的图像
UIImage *image = [UIImage imageNamed:@"img"];
将缓存图像并不会像这样加载它
UIImage *image = [UIImage imageWithContentsOfFile:@"img.png"];
人们说访问缓存的图像会更快,因为 iOS 会从内存中访问它,我们不会有读取和解码文件的开销。好的,我明白了,但是假设我使用第二种非缓存方法将图像加载到作为属性的视图上,就像这样
UIImage *image = [UIImage imageWithContentsOfFile:@"img.png"];
self.imageView = [[UIImageView alloc] initWithImage:image];
图像不是已经在内存中了吗?如果我想访问它,我只需执行 imageView.image 并从内存中获取它。
我可能很累,但我无法想象缓存版本的单一用途,或者我不明白这个缓存的含义。
愿意解释一下吗?谢谢。
【问题讨论】:
-
缓存和内存是两个不同的概念。比如说,当你使用 imageNamed 时,它会首先在缓存中查找,如果它在那里,它将被加载,否则将从磁盘加载。当您使用 imageWithContentsOfFile 时:它会直接从磁盘加载图像。
-
想想如果你的imageView在firstView上并且你正在调用imageWithContentsOfFile,它如何访问第一个视图的imageView并获取图像?
-
如果您只在没有从
imageNamed:获得任何好处时访问/加载图像,实际上在这种情况下您应该使用imageWithContentsOfFile:,使用imageNamed:的好处是当您使用相同的来自多个地方的图片 -
如果您在应用运行期间多次需要该图像,则使用缓存...
-
那么,您的意思是,如果图像被缓存,我只能将图像保存到属性中?我不这么认为。
标签: ios cocoa-touch caching uiimage