开源框架:SDWebImage

引言:

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

时间: 2024-08-01 08:46:43

开源框架:SDWebImage的相关文章

iOS开发:开源框架和类

  使用的开源框架和类: 1:SDWebImage,UIImageView+WebCache加载一张图片. 2:UIViewExt用于定位坐标很有用,可以直接拿到bottom,top,left,right. 3:CustomCatagory,是个类目,里面有navigationBar和UINavigationController的两种系统版本下自定义navigationBar背景图片方法,用于自定义navigationBar背景图片. 4:UIUtils工具类,里面我写了四个方法,一个获取doc

windframework轻量级PHP开源框架

windframework是一个轻量级的php开源框架.它以组件工厂为核心,提供了像MVC,数据持久化,视图模板引擎等应用技术.此外windframework采取了一种组件化的开发模式.虽然目前的组件库还不算丰富健壮,但是基于这种开发模式,使组件的扩展变得非常的容易.windframework拥有一个强健的内核,它实现了基于配置的Ioc控制反转技术.是开发者只需要简单的配置,就可以实现类的依赖注入,完全实现了类与类的松耦合.当然它的美妙之处还不仅于此. 开源项目地址:https://github

分布式计算开源框架Hadoop入门实践(一)

在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章<Tiger Concurrent Practice --日志分析并行分解设计与实现>中有所提到.但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作.然而未来,对于海量日志分析的工作,还是需要有所准备.现在最火的技术词汇莫过于"云计算",在Open API日益盛行的今天,互联网应用的数据将会越来越

Android Annotations开源框架简介

AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你几乎可以使用在任何地方, 大大的减少了无关痛痒的代码量,让开发者能够抽身其外,有足够的时间精力关注在真正的业务逻辑上面.而且通过简洁你的代码,也提高了代码的稳定性和后期的维护成本.以下AndroidAnnotations简称为AA 可能会有人提出异议了,我们移动设备的性能,不比后台服务器拥有充足的内存和运算能力.当大量的使用注解的时候,会不会对APP的造成什么不良的影响,会不会

分布式计算开源框架Hadoop入门实践(三)

Hadoop基本流程 计算开源框架Hadoop入门实践(三)-hadoop分布式计算框架"> 一个图片太大了,只好分割成为两部分.根据流程图来说一下具体一个任务执行的情况. 在分布式环境中客户端创建任务并提交. InputFormat做Map前的预处理,主要负责以下工作: 验证输入的格式是否符合JobConfig的输入定义,这个在实现Map和构建Conf的时候就会知道,不定义可以是Writable的任意子类. 将input的文件切分为逻辑上的输入InputSplit,其实这就是在上面提到的

初探Java企业级开源框架OSGi

第一次接触OSGi 是2006年看见的一则网上新闻,该新闻中提到BMW 汽车的通信-娱乐(infotainment)系统采用了OSGi 架构,这套系统主要用来控制汽车上的音箱.灯光.导航和通讯等设备,整个系统由1000多个模块组成,启动时间却只需要3.5秒钟,这对于一个基于Java 的框架来讲,具有两个重大意义:一.说明了Java 执行效率并不差:二.OSGi 框架的性能尤其优秀.因此笔者对OSGi 框架产生了极大的兴趣,后来终于在一个项目中负责研究和开发基于OSGi 框架的应用程序,从此对它便

Linux环境下的Java开发(七):“乱花渐欲迷人眼”的开源框架

江南白衣在2005年9月的时候,就在他的博客上提出:每个团队都应该有一个 Appfuse式的项目,用来演示团队目前的体系框架和设计模式.这种项目的好处有 一打:比如为所有项目提供共同的Library Stack,提供最可靠的代码蓝本,保证 大家的模式和代码风格一致,加快知识在团队的传播,方便新人的融入,还有为 试验代码提供一个稳定简洁的环境.而且,构建或者使用这样的项目要遵守几条 铁的纪律:一是强制更新,所有团队approval的最新模式都要refactor到 MyAppfuse中:二是规范更新

各种SmartPhone上的跨平台开源框架的总结

各种SmartPhone上的跨平台开源框架的总结 目前SmartPhone的开发语言 Apple iPhoneObjective-C C/C++ Google AndroidJAVA 可以使用NDK进行C/C++的开发 Windows PhoneC# VB.net Windows Phone7是全新的平台,和以前的不兼容,目前不支持C/C++ SymbianC/C++ 这个框架还是比较复杂的,而且界面开发对C++的使用也有一些特别的约定 RIM BlackBerryJAVA Palm webOS

JavaScript跨平台的开源框架NativeScript

本文给大家分享的是一款使用javascript来构建跨平台原生移动应用的开源框架--NativeScript,可以使用JavaScript开发跨平台.真正原生的iOS, Android 和 Windows 移动App.开发人员使用NativeScript提供的库来构建应用UI,其抽象了各种原生平台之间的不同. NativeScript是一款使用JavaScript语言来构建跨平台原生移动应用的开源框架,支持iOS.Android和Windows Phone.且NativeScript的使用没有过