Farlanki

学习SDWebImage

字数统计: 319阅读时长: 1 min
2016/04/19 Share

SDWebImage是一个第三方图片异步加载库。在需要从网络上加载大量图片的时候使用这个库会十分方便。

流程

-sd_setImageWithURL:placeholderImage:options:progress:completed: UIImageView + WebCache
使用这个库,一般是调用这个方法,指定了处理的选项,占位图片,处理的block和完成操作时的回调block。

1
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

调用了运行时的方法,在运行时为UIImageView增加了一个属性.

调用了 sd_setImageWithURL:placeholderImage:options:progress:completed:这个方法之后,会调用 SDWebImageManager-downloadImageWithURL:options:progress:complete: 方法.

SDWebImageManager拥有连个属性,imageCacheimageDownloader.顾名思义,imageCache负责的是图片的缓存工作,imageDownloader负责的是图片的下载工作.

-downloadImageWithURL:options:progress:complete:这个方法里,先创建一个SDWebImageCombineOperation,然后使用调用imageCache-queryDiskCacheForKey:done:方法的返回值赋值给operation的cacheOperation属性.

-queryDiskCacheForKey:done:done闭包里,判断是否从硬盘中取得了图片,如果取得了图片,则调用sd_setImageWithURL:placeholderImage:options:progress:completed:中的complete闭包,否则,调用imageDownloader-downloadImageWithURL:options:progress:completed:方法,下载图片.如果下载图片失败,把url加入failedURLs里.如果下载图片成功,把图片加进NSCache,如果选项SDWebImageCacheMemoryOnly为假,那么把图片保存到磁盘中.

CATALOG
  1. 1. 流程