开源框架:SDWebImage

简介: 引言: SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒! 这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存.

引言:

SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒!

这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存.

我们如果能够熟练使用其API 就可以实现很多复杂的需求了.

作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多的API接口.加强了下载类的支持和多个文件同时下载,以及内置了下载进度功能等


安装:

首选的安装方式是CocoaPods

Github托管地址如下:

https://github.com/rs/SDWebImage

SDWebImage API 文档入口(英文的,蛋疼,如果中文的话,估计咱也不写这篇文章了,要么也很短.):

http://hackemist.com/SDWebImage/doc/

如果你只是匆匆忙忙下载了一个framework 就回到了自己工程,可能会遇到无法使用的情况:那么下面的文章来解决你遇到的问题:

http://blog.csdn.net/qjlhlh/article/details/8191111

里面提到一句,使用这类代码的时候,最好预先看看Readme(使用说明)

1:引入系统框架 ImageIO.framework.

2:framework 引入头文件的方式如下:

#import<SDWebImage/UIImageView+WebCache.h>
3: Build Settings->Other Linker Flags->-ObjC or-all_load




使用:

SDWebImageDownloader

这个下载器改版很大,现在里面就一个方法,就是发起前往下载图片的函数:

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:imageUrl options:SDWebImageDownloaderProgressiveDownload progress:^(NSUInteger receivedSize, long long expectedSize) {
    NSLog(@"%u %lld",receivedSize,expectedSize);
} completed:^(UIImage *aImage, NSData *data, NSError *error, BOOL finished) {
    //self.image = aImage;
    NSLog(@"成功了:%d",UIImageJPEGRepresentation(aImage, 1).length);
}];

里面大部分参数属于一看就懂的,进度Block返回的信息有两个参数:1:下载进度. 2:文件大小.

我这里解释一下里面的options枚举的作用

SDWebImageDownloaderOptions

1:SDWebImageDownloaderLowPriority 这个属于默认的使用模式了,前往下载,返回进度Block信息,完成时调用completedBlock

2:SDWebImageDownloaderProgressiveDownload 这个是新版本加的功能,设置后,在返回进度Block的同时,返回completedBlock,里面的UIImage就是当前下载时的图片,可以实现将图片一点点显示出来的功能.

人世间最难的莫过于理解了! 开句玩笑^^

那么SDWebImageDownloader 在新版本的中的分工很明确,只做一件事情,那就是下载,只是下载而已,所以,下载成功以后的图片资源是不会自动缓存的.

如果要缓存,这里需要使用到

SDImageCache

SDImageCacheType 当下载请求结束时,通过这个枚举来告知图片的来源

1:SDImageCacheTypeNone   网络

2:SDImageCacheTypeDisk     设备硬盘

3:SDImageCacheTypeMemory 内存


将上面两步骤的需求合并可直接使用

SDWebImageManager

新版本的管理类的改动也相当大,而且就一个方法了,如下:

[[SDWebImageManager sharedManager] downloadWithURL:imageUrl options:SDWebImageLowPriority progress:^(NSUInteger receivedSize, long long expectedSize) {
    NSLog(@"%u %lld",receivedSize,expectedSize);
} completed:^(UIImage *aImage, NSError *error, SDImageCacheType cacheType, BOOL finished) {
    self.image = aImage;
    NSLog(@"成功了:%d",UIImageJPEGRepresentation(aImage, 1).length);
}];

这样发起的下载请求,就会自动缓存图片资源了.


那么任何发起的下载请求,都会返回一个代理. 这个写法很神奇,值得深究啊.

也就是:SDWebImageOperation 将这个委托缓存一下,做什么用呢?一件事情,取消下载请求.


这边文章介绍了整个SDWebImage的运作原理,你看完之后,一定会说:真TMD 的复杂

http://blog.csdn.net/uxyheaven/article/details/7909373


目录
相关文章
|
开发者 iOS开发
介绍 UITableView 和 UICollectionView,它们的区别是什么?
介绍 UITableView 和 UICollectionView,它们的区别是什么?
447 0
|
存储 缓存 算法
iOS 常见触发离屏渲染场景及优化方案总结
iOS 常见触发离屏渲染场景及优化方案总结
1241 0
iOS 常见触发离屏渲染场景及优化方案总结
|
iOS开发 编译器 JavaScript
iOS八种内存泄漏问题
循环引用(Retain Cycle) 先简单说一下什么是循环引用(retain cycle) ​假设我们有两个实例A和B,B是A的一个strong型的property,则B的引用计数是1,当A的需要释放的时候,A则会调用[B release]来释放B,B的引用计数则减为0,释放。
2467 0
|
安全 开发工具 数据安全/隐私保护
iOS-面试之你做过支付没有?
iOS-面试之你做过支付没有?
178 0
|
JavaScript 前端开发 Java
小笔记:表 - 各种语言的 CommonMark Markdown解析器 实现
小笔记:表 - 各种语言的 CommonMark Markdown解析器 实现
629 1
|
存储 算法 安全
关联对象的实现原理
这篇文章是来详细解释AssociationedObject的实现原理,篇幅较长
223 0
关联对象的实现原理
|
程序员 开发工具 git
iOS面试:如何在平时工作中积累经验
如果你是一个离职者,还没有找到工作,那么,个人愚见:         一、不打无准备的仗,在没有准备好的情况下切记不要盲目去参加面试,在现在竞争异常激烈的大背景下,没有准备好匆匆去参加面试,可想而知最后的面试结果是啥;         二、仅仅指望狂刷面试题,背记大牛的面试笔记,是远远不够的,一份工作的竞争比例是在1:300~400之间,如果你想在这几百人中脱颖而出,你就需要花费比别人更多的努力才行;
163 0
iOS面试:如何在平时工作中积累经验
|
存储 缓存 自然语言处理
iOS-底层原理 12:消息流程分析之快速查找
iOS-底层原理 12:消息流程分析之快速查找
146 0
iOS-底层原理 12:消息流程分析之快速查找
|
API iOS开发
iOS底层原理:Method Swizzling原理和注意事项(二)
Method Swizzling的含义是方法交换,其核心内容是使用runtime api在运行时将一个方法的实现替换成另一个方法的实现。我们利用它可以替换系统或者我们自定义类的方法实现,进而达到我们的特殊目的,这就是我们常说的iOS黑魔法。
iOS底层原理:Method Swizzling原理和注意事项(二)
|
设计模式 缓存 编解码
2020年iOS大厂面试题总结
2020年iOS大厂面试题总结
539 0