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

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

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

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

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

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 引入头文件的方式如下:

  1. #import<SDWebImage/UIImageView+WebCache.h>

3:Build Settings->Other Linker Flags->-ObjC or-all_load

以上三部设置之后,就可以开始写代码了.

接下来介绍使用到的各个类库功能说明:

SDWebImageDownloader

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

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

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

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

SDWebImageDownloaderOptions

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

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

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

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

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

SDImageCache

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

1:SDImageCacheTypeNone   网络

2:SDImageCacheTypeDisk     设备硬盘

3:SDImageCacheTypeMemory 内存

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

SDWebImageManager

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

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

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

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

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

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

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

开源框架:SDWebImage的更多相关文章

  1. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

  2. iOS开源 框架

    UI界面类项目: Panoramagl ——720全景展示 Panorama viewer library foriPhone, iPad and iPod touch MBProgressHUD — ...

  3. iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇

    iOS超全开源框架.项目和学习资料汇总--数据库.缓存处理.图像浏览.摄像照相视频音频篇 感谢:Ming_en_long 的分享 大神超赞的集合,http://www.jianshu.com/p/f3 ...

  4. IOS-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34      阅读:533      评论:0      收藏:0      [点我收藏+] ...

  5. iOS开发-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...

  6. Android 开源框架Universal-Image-Loader学习

    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...

  7. 值得推荐的android开源框架

    1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...

  8. 介绍一个非常好用的跨平台C++开源框架:openFrameworks

    介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...

  9. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

随机推荐

  1. SystemV-IPC

    这里记录的三种SystemV-IPC包括(消息队列,信号量以及共享内存) 1:标识符和键值 键值(key_t) : IPC结构的外部名(所谓外部名就是各用户进程可获得并操作的,通过它使用XXXget获 ...

  2. java基础-Integer类常用方法介绍

    java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...

  3. Spark记录-Scala介绍

    Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...

  4. 跨域问题 Uncaught DOMException: Blocked a frame with origin。。。

    第三方系统内嵌 到iframe中的 跨域问题. 解决方案: http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

  5. Bootstrap简单入门

    Bootstrap简单入门 BootStrap基本模板 <!DOCTYPE html> <html> <head> <meta charset="U ...

  6. Java并发编程原理与实战二十八:信号量Semaphore

    1.Semaphore简介 Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类. 所谓Semaphore即 信号量 的意思. 这个叫法并不能很好地 ...

  7. [转载]ECMA-262 6th Edition / Draft August 24, 2014 Draft ECMAScript Language Specification

    http://people.mozilla.org/~jorendorff/es6-draft.html#sec-23.4 Draft Report Errors and Issues at: htt ...

  8. asp.net后台操作javascript:confirm返回值

    在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...

  9. HDU 1718 Rank 排序

    解题报告:给一个班的学生的分数排序,然后判断Jack在他们班级的排名是多少,并且有如下规定,若多个人的分数相同,则他们的排名也 是相同的.说白了就是问这个班上分数比Jack高的人数有多少个,如果有n个 ...

  10. tensorflow中的卷积和池化层(一)

    在官方tutorial的帮助下,我们已经使用了最简单的CNN用于Mnist的问题,而其实在这个过程中,主要的问题在于如何设置CNN网络,这和Caffe等框架的原理是一样的,但是tf的设置似乎更加简洁. ...