免费开源的iOS开发学习平台

网络图片下载SDK:SDWebImage

在实际的App开发中,界面显示的图片除了少量的本地图片外,绝大多数图片都需要通过网络从服务器下载。对于网络图片下载的处理逻辑需要考虑诸多因素,例如网络传输因素、图片缓存等,通常情况下我们都会使用SDWebImage来完成网络图片的下载。本节简单介绍一下SDWebImage的基本使用,全球超过90%的App都会存在SDWebImage的身影。

SDWebImage的下载与安装

从Github中搜索关键字:SDWebImage,即可找到SDWebImage的版本仓库;

SDWebImage的安装支持使用CocoaPods、Carthage以及手工方式安装,以CocoaPods为例,需要在工程的Podfile文件中添加如下内容,然后更新下载即可。

platform :ios, '7.0'
pod 'SDWebImage', '~>3.8'

SDWebImage是对UIImageView类增加了分类。在需要使用图片下载的类中,引用SDWebImage头文件即可对UIImageView对象使用扩展的方法。

#import <SDWebImage/UIImageView+WebCache.h>

SDWebImage中的核心方法

SDWebImage提供了极其简单的方法用于下载网络图片,最简单的情况下,只要提供图片素材的URL即可。SDWebImage提供的常见下载图片方法如下:

  • 最简单的方法,只需要提供图片的网络地址以及占位图即可
-(void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
  • 指定图片下载的相关操作。在该方法中,需要传入一个SDWebImageOptions类型的参数,该参数中定义了有关图片下载的操作,例如,失败后是否重试、是否缓存、优先级等等。
-(void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
  • 在block中定义图片下载成功后的后续操作
-(void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
  • 在图片下载过程中,获取图片下载的进度。例如我们可以添加一个进度条,提示用户图片下载的进度。
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;

图片缓存管理

SDWebImage提供了缓存机制,即下载过的图片,当需要再次显示时,SDWebImage会优先从缓存中查找是否有存储图片。SDWebImage使用的缓存即包括在内存中的缓存,也包括在应用沙盒中的缓存(硬盘中的缓存)。缓存机制的存在一方面加快了图片下载的速度,为用户节省了流量,但另外一方面也会带来存储空间的浪费,因此在SDWebImage中,也提供了用于缓存管理的类--SDImageCache。在SDImageCache类中,提供了如下几个常用的方法。

  • 内存中缓存的大小
@property (assign, nonatomic) NSUInteger maxMemoryCost;
  • 硬盘缓存的大小
@property (assign, nonatomic) NSUInteger maxCacheSize;
  • 缓存保存的时间,单位:秒
@property (assign, nonatomic) NSInteger maxCacheAge;
  • 清除内存中的缓存
- (void)clearMemory;
  • 清除硬盘中的所有缓存图片
- (void)clearDisk;
  • 清除硬盘中过期的缓存图片
- (void)cleanDisk;