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