SDWebImage

iOS的图片加载框架

SDWebImage

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

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

优点

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