「OC」SDWebimage的学习
前言
在知乎日报这个项目之中,我在很多情况下都会进行图片资源的网络申请。通过上网搜索我了解到了SDWebimage这个功能丰富的第三方库,进行了较为浅层的学习。因为SDWebimage这个库之中的相关内容还是较为多且复杂的,我个人的能力只能够进行简单的运用
简介
这是SD库之中的框架之中的内容
UIImageView+WebCache
和UIButton+WebCache
直接为表层的 UIKit框架提供接口SDWebImageManger
负责处理和协调SDWebImageDownloader
和SDWebImageCache
, 并与 UIKit层进行交互。SDWebImageDownloaderOperation
真正执行下载请求;最底层的两个类为高层抽象提供支持。
使用
这里仅仅介绍SDWebImage之中最简单的用法,也就是我在项目之中使用的相关方法
[topDisplayView.imageView sd_setImageWithURL:[NSURL URLWithString:story.image]];
处理下载进度和完成事件
可以添加下载进度和完成的回调:
[imageView sd_setImageWithURL:imageURL
placeholderImage:[UIImage imageNamed:@"placeholder"]
options:SDWebImageProgressiveLoad
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
// 这里可以更新进度条
NSLog(@"下载进度:%f", (CGFloat)receivedSize / expectedSize);
}
completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if (error) {
NSLog(@"图片加载失败: %@", error.localizedDescription);
} else {
NSLog(@"图片加载成功并缓存!");
}
}];
清除缓存
SDWebImage
默认会缓存图片,减小网络流量。如果需要清理缓存,可以使用 SDImageCache
:
// 清理内存缓存
[[SDImageCache sharedImageCache] clearMemory];
// 清理磁盘缓存
[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
NSLog(@"磁盘缓存已清除");
}];
设置缓存策略
我们可以通过 SDWebImageOptions
来控制缓存策略,比如使用 SDWebImageRefreshCached
强制刷新图片:
[imageView sd_setImageWithURL:imageURL placeholderImage:[UIImage imageNamed:@"placeholder"] options:SDWebImageRefreshCached];
参考文章
iOS SDWebImage详细介绍