SDWebImage
此库提供UIImageView类别来支持网络远程下载图像。
以下为提供的功能:
* UIImageView类别添加基于Cocoa Touch框架的Web图像缓存管理。
* 异步图像下载
* 拥有自动缓存过期处理的异步内存/磁盘图像缓存,
* 支持动画GIF
* 支持WebP格式
* 解压背景图像
* 保证相同的URL不会被下载多次
* 保证假的网址将不被一次又一次地重试
* 保证,主线程将不会被阻止
* 性能好
* 使用GCD和ARC
* 支持Arm64
UITableView使用UIImageView+WebCache
只需要import UIImageView+WebCache.h之后
调用sd_setImageWithURL:placeholderImage:
使用Blocks
有了blocks,你可以知道图像下载的过程和什么时候图像取得结束。
Note: 如果是自行取消的话,success和failure的block都不会调用
使用SDWebImageManager
该SDWebImageManager是UIImageView+WebCache背后的类。它将图像缓存存储和异步下载联系在一起。您可以直接使用这个类来从网页下载图像收益。也可以缓存在另一个上下文而不是UIView。
单独使用异步图像下载器
单独使用异步图像缓存
SDImageCache维持了内存缓存和可选的磁盘缓存。
可以用queryDiskCacheForKey:done: 来查看磁盘缓存。
如果返回为nil 意味着当前缓存没有这张图片。
所以你需要负责生成图像并缓存图像。
缓存的键是应用中独有的标识,基本上是图像的绝对路径。
默认来说SDImageCache会在内存缓存中发现不到图像的情况下 查询磁盘缓存。你可以禁止这一操作发生通过调用另一可选方法imageFromMemoryCacheForKey
为了将图像存储在缓存里,你可以使用storeImage:forKey:方法,如下:
默认的,图像会异步的存储在内存缓存和磁盘缓存中,如果你只想要保存在内存中,使用可选择方案storeImage:forKey:toDisk: 传空的第三个参数。
使用缓存键过滤器
有时,你可能不希望使用图像的URL作为缓存键,因为URL的一部分是变动的(换句话说:访问控制的目的)。SDWebImageManager提供了一种方法来设置缓存键过滤器,取NSURL作为输入,输出一个缓存键NSString。
下面的示例在application delegate里将URL删除所有的查询字符串之后用作缓存键过滤器:
常见问题
在UITableViewCell使用动态图像尺寸
UITableView通过用于小区中的第一图像组确定图像的大小。如果你的远程图像没有大小的占位符图像相同,您可能会遇到奇怪的变形比例问题。下面这篇文章给出了一个方法来解决此问题(翻译略)
控制图像刷新
SDWebImage默认完成了非常积极的缓存。它忽略了所有类型的缓存控制头部的HTTP服务器返回,并且没有时间限制缓存返回的图像。这意味着你的图片网址指向,从来没有改变图像静态URL。如果尖图像发生变化,部分URL应该相应地改变。
如果你不控制你正在使用的图像服务器,您可能无法更改URL时,它的内容更新。这是用于例如实化身的URL的情况。在这种情况下,你可以使用SDWebImageRefreshCached标志。这将略微降低性能,但会尊重HTTP缓存控制头:
添加一个进度指示器
安装
有三种方法在项目中使用SDWebImage:
* 使用的CocoaPods
* 复制所有文件到您的项目
* 导入项目作为静态库
用CocoaPods安装
CocoaPods是Objective-C的依赖管理者,能自动化并简化在项目中使用第三方库的过程中依赖管理。
Subspecs
有3个subspaces可以使用:Core, MapKit, WebP (这意味你可以只安装一部分的SDWebImage模块。默认只有Core,如果你想用WebP,你需要特别指定)
pod ’SDWebImage/WebP’
用Carthage安装
Carthage是个轻量级版本依赖管理者
有许多地方太过于懒得翻译了,不便之处请多提意见 谢谢!