SDWebImage

iOS的图片加载框架

SDWebImage

做应用难免要遇到图片存储的问题, 在 Android 有 Glide 这样的图片加载框架, 设置好图片的 URL, 它帮助你异步非阻塞式地从网络加载图片; 还可以进行缓存, 即下一次用相同的 URL 加载图片时, 如果本地已经有缓存了, 那么直接加载本地的图片, 避免了进行耗时的网络访问请求.

iOS 也有类似的框架, 就是 SDWebImage, 其设置图片的流程大致如下:

优点

  1. 提供了一个 UIImageView 的 category 用来加载网络图片并且对网络图片的缓存进行管理
  2. 采用异步方式来下载网络图片
  3. 采用异步方式,使用 memory+disk 来缓存网络图片,自动管理缓存。
  4. 支持 GIF 动画
  5. 支持 WebP 格式
  6. 同一个 URL 的网络图片不会被重复下载
  7. 失效的 URL 不会被无限重试
  8. 耗时操作都在子线程,确保不会阻塞主线程
  9. 使用 GCD 和 ARC
  10. 支持 Arm64

通过CocoaPods安装

  1. 打开你的 Podfile, 输入 pod 'SDWebImage'

  2. 在终端执行 pod install

基本使用

引入头文件

1
2
#import <SDWebImage/UIImageView+WebCache.h>
#import <SDWebImageManager.h>

通过url加载图片

1
2
[imageView sd_setImageWithURL:[NSURL URLWithString:@""]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

测试一下加载本地服务器的静态图片:

成功加载的回调

1
2
3
4
5
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
// 进行成功后的操作
}];

获取图片的缓存大小

1
[[SDImageCache sharedImageCache] totalDiskSize];

测试代码:

1
2
3
SDImageCache * cache = [SDImageCache sharedImageCache];
NSUInteger tmpSize = [cache totalDiskSize];
[self.imgSize setText:[[NSString alloc]initWithFormat:@"%lu", tmpSize] ];

清除内存/磁盘缓存

1
2
3
4
// 清除内存缓存
[[SDImageCache sharedImageCache] clearMemory];
// 清除磁盘缓存
[[SDImageCache sharedImageCache] clearDiskOnCompletion];

仅供参考

1和2有些过时了, 上面的函数是自己看文档找到的

SDWebImage 解读
SDWebImage的使用
官方文档SDImageCache(im)totalDiskSize)