缓存图像,使其不会在 reloadData 调用时重新加载 - AFNetworking 2.0 setImageWithUrl
Posted
技术标签:
【中文标题】缓存图像,使其不会在 reloadData 调用时重新加载 - AFNetworking 2.0 setImageWithUrl【英文标题】:Caching image so it does not reload on reloadData call - AFNetworking 2.0 setImageWithUrl 【发布时间】:2015-04-08 16:03:19 【问题描述】:围绕这个主题有几个关于堆栈溢出的问题,但我找不到解决方案。
我的 tableview 中的每个 tableview 单元格都有一个从 url 加载的 imageview。
图像加载正常,但每当我调用 reloadData 时,图像就会再次加载,从而产生闪烁效果。在 cellForRowAtIndexPath 中,我将 prepareForReuse 中的图像设置为空白图像,因此它也在此处闪烁。
我知道我需要缓存图像,但我该怎么做呢?我是否需要存储自己的缓存图像并在基础数据更改时更新它? AFNetworking 是否默认提供此功能?
我已经尝试过 NSURLRequestReturnCacheDataElseLoad - 它似乎不起作用。
[cell.recipientProfilePic setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[user.photos objectAtIndex:0]] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:2300] placeholderImage:[UIImage imageNamed:@"blank_image_load"]
success:nil
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
];
【问题讨论】:
【参考方案1】:使用这个工具,你可以用 Cocoapods 安装它:
https://github.com/rs/SDWebImage
它通过带有sd_imageWithURL:
享受的URL处理UIImageView
的缓存和加载图像。
【讨论】:
感谢 Daniel - 除非必须,否则我宁愿不为此安装另一个库。你知道这是否可以使用 AFNetworking? 嗯,AFNetworking、SDWebImage 和 GPUImage 是大多数开发人员在 ios 中用于处理图像的三个库。如果您真的不想使用其他库,那么您可以将下载的图像存储到磁盘上并将 URL 字典存储到 NSUserDefaults。但这似乎工作量很大,因为 SDWebImage 会为您处理缓存和预取。以上是关于缓存图像,使其不会在 reloadData 调用时重新加载 - AFNetworking 2.0 setImageWithUrl的主要内容,如果未能解决你的问题,请参考以下文章
循环中的 tableView reloadData 不会在每次通过时绘制单元格
ReloadData 不会触发 tableView:numberOfRowsInSection:
为啥 UITableView contentOffset 在 tableview reloadData 期间变化很大,而不是保持不变? reloadData 后如何使其保持不变?
UIImagePickerController 关闭后 UICollectionView 不会 reloadData()