2016 May 24 网络加载, 图片缓存机制, URL, iOS
iOS网络图片缓存
一、加载网络图片
1.简单方法展示网络图片
- 看似获取网络上的图片十分简单,实际这样的操作有很大的性能问题:
- 这种方法是同步获取的,如果图片十分大的话,界面就会卡死了
2.采取异步获取的方法来展示图片
二、处理网络图片缓存步骤
在开发移动应用的时候,因为手机流量、网速、内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了。比如某个应用要经常显示网络图片,就不能每次显示图片都去网络上下载,那太耗费时间也太耗费流量,这时就要对网络图片进行缓存了。
- 根据图片URL查找内存是否有这张图片,有则返回图片,没有则进入第二步
- 查找物理存储是否有这张图片,有则返回图片,没有则进入第三步
- 从网络上下载该图片,下载完后保存到内存和物理存储上,并返回该图片
-
注:因为URL包含特殊字符和长度不确定,要对URL进行MD5处理或其他处理
下面是针对以上步骤的代码讲解:
- 内存缓存图片处理
- 使用NSMutableDictionary存储图片UIImage,数组的Key为该图片的URL地址
- 物理缓存图片处理
- 把图片保持到物理存储设备上,则直接使用NSFileManager,把URL作为文件名保存
- 网络图片下载处理
- 图片使用异步下载,下载完后把图片保持到NSMutableDictionary和物理存储上
三、SDWebImage类库的处理方式
- SDWebImages是一个在网络图片缓存处理上比较好的第三方类库
- 特点:
- 依赖的库很少.功能全面。
- 自动实现磁盘缓存:
- 缓存图片名字是以MD5进行加密的后的名字进行命名.(因为加密那堆字串是唯一的)
- [imageViewsd_setImageWithURL:v.fullImageURL placeholderImage:[UIImage imageNamed:@”xxxxx”]].
- 就一个方法就实现了多线程\带缓冲等效果.(可用带参数的方法,具体可看头文件)
- 下面是一部分源码解析
SDImageCache.h文件:
SDImageCache.m文件
- SDWebImage中的一些参数:
- SDWebImageRetryFailed = 1« 0, 默认选项,失败后重试
- SDWebImageLowPriority = 1« 1, 使用低优先级
- SDWebImageCacheMemoryOnly = 1« 2, 仅仅使用内存缓存
- SDWebImageProgressiveDownload = 1« 3, 显示现在进度
- SDWebImageRefreshCached = 1« 4, 刷新缓存
- SDWebImageContinueInBackground =1 « 5, 后台继续下载图像
- SDWebImageHandleCookies = 1« 6, 处理Cookie
- SDWebImageAllowInvalidSSLCertificates= 1 « 7, 允许无效的SSL验证
- SDWebImageHighPriority = 1« 8, 高优先级
- SDWebImageDelayPlaceholder = 1« 9 延迟显示占位图片