所以,我有这个新闻提要结构。每个新闻块都是自定义UITableViewCell
。现在,每个自定义单元格都有一个显示图像的CollectionView
。
问题在于,当滚动和新闻单元(新闻块)出现时,CollectionView
正在重新加载 - 每次单元格出现时。我正试图找到在主ViewController
侧缓存这些图像的方法。
最好的方法是什么?
答案 0 :(得分:1)
如果你想避免为这类工作实现你自己的缓存/磁盘/内存处理程序,我强烈推荐AFNetworking或SDWebImage为你处理它。
关于如何设置图像及其缓存的SDWebImage示例:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
它会自动为您处理所有缓存/磁盘/内存。
以下是使用SDWebImage处理缓存的示例:
//设置内存大小限制(检查旧设备以避免在将其设置为高值时出现内存错误。)
[[SDImageCache sharedImageCache] setMaxMemoryCost:****];
//清除磁盘缓存
[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
}];
//清除内存缓存
[[SDImageCache sharedImageCache] clearMemory];
我会远离NSUserDefaults或上面提到的将图像设置为字典或数组的示例,以避免内存错误和应用程序崩溃/性能。
答案 1 :(得分:0)
你必须缓存你的UIImage实例,所以,如果你从任何来源获得一些图片,你可能会写下面的内容:
/* some code before */
UIImage *yourImage = /* Get your UIImage from any available way */
[self.cache setObject:yourImage forKey:@"SomeUniqueID"];
/* some code after */
我想,这段代码看起来更像是一个函数,它获取UIImage实例并且它的id作为参数。
我认为,这是存储图像的最常用方式。如果您需要更加熟练的方式而没有任何第三方框架的开销,您可以阅读有关NSCache的文档。
但总的来说,您有很多不同的方式来存储图像:
因此,我上面编写的代码只会将图像存储到内存缓存中。