SDWebImage ReadMe.md 文档

:SDWebImage框架github下载地址:https://github.com/rs/SDWebImage

注1:该文章简单翻译了SDWebImage最新版本(3.8.1)的readMe.md,时间紧促,如有不当请指正修改,十分感激。

注2:对该框架的学习将持续进行,在个人的github地址可以得到最新进展。

Web Image

版本3.8.1|平台iOS|开源协议MIT|

该库为UIImageView提供了一个分类来处理远程图片资源的加载。

它:

1)为Cocoa Touch框架提供一个UIImageView的分类,加载图片并进行缓存处理。
2)异步图像下载
3)异步存储器+具备自动缓存过期处理的磁盘映像缓存
4)支持GIF播放
5)支持WebP格式
6)背景图像解压缩
7)保证同一个url图片资源不被多次下载
8)保证错误url不被反复尝试下载
9)保证不会阻塞主线程
10)高性能
11)使用GCD和ARC
12)支持Arm64架构

:SDWebimage3.8版本要求iOS系统版本为iOS7.0或以上(因为内部使用了NSURLSession)。3.0~3.7版本要求iOS系统版本为iOS5.1.1以上。如果你需要在iOS5.0以前的版本使用,那么请您使用2.0版本。

How is SDWebImage better than X?

·AFNetworking已经提供UIImageView相似的功能,还有必要使用SDWebimage吗?

Who Use It(谁用)

查看哪些应用使用了SDWebImage框架,添加你的应用到列表。

How To Use(如何用)

查看api文档CocoaDocs - SDWebImage

TableView加载图片使用UIImageView+WebCache分类

只需要包含UIImageView+WebCache.h头文件,并在tableView的数据源方法tableView:cellForRowAtIndexPath: 中调用sd_setImageWithURL:placeholderImage:方法即可。异步下载和缓存处理这一切都将会自动为你处理。

#import <SDWebImage/UIImageView+WebCache.h>
... - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
} // Here we use the new provided sd_setImageWithURL: method to load the web image
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; cell.textLabel.text = @"My Text";
return cell;
}

使用Blocks

使用block,你将能够得到图片的下载进度并获知图片是否下载成功或者失败:

// Here we use the new provided sd_setImageWithURL: method to load the web image
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
... completion code here ...
}];

注意:如果图像请求在完成前被取消了,那么成功和失败的block块将都不会被调用。

使用SDWebImageManager

UIImageView+WebCache分类背后调用的是SDWebImageManager类的方法,负责图像的异步下载和缓存处理。你可以直接使用这个类来下载图片和进行缓存处理。

这有一个如何使用SDWebImageManager的简单示例:

SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// do something with image
}
}];

单独异步下载图片

它也可以独立使用异步图片下载:

SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
[downloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
// do something with image
}
}];

单独异步缓存图片

也可以单独使用基于图像的高速异步缓存处理。SDImagecache提供内存高速缓存和可选的磁盘高速缓存。磁盘高速缓存写入操作是异步的,所以不需要在用户界面添加不必要的延迟。

为了方便,SDImageCache类提供了一个单一的实例,但如果你想自定义缓存空间,那么可以创建自己的实例。

您可以使用queryDiskCacheForKey:done:方法查找缓存。如果该方法返回nil,则说明当前image没有缓存。你需要负责下载和进行缓存处理。图像缓存的key通常为该图像的URL。

SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
// image is not nil if image was found
}];

默认情况下,如果对应图片的内存缓存不存在,那么SDImageCache将查找磁盘缓存。可以通过调用imageFromMemoryCacheForKey:方法来阻止。

你可以调用storeImage:forKey: method:方法保存图片到缓存。

[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];

默认情况下,图像将被进行内存缓存和磁盘缓存(异步)。如果你只想要内存缓存,那么可以使用storeImage:forKey:toDisk:方法,第三个参数传NO即可。

使用缓存key筛选器

有时,你可能会因为URL的一部分是动态的而不希望使用URL作为图像缓存的key。 SDWebImageManager提供了一种方式来设置,输入URL输出对应的字符串。

下面的示例在应用程序的委托中设置一个过滤器,在使用它的缓存键之前将从URL中删除任何查询字符串

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
return [url absoluteString];
}; // Your app init code...
return YES;
}

常见问题

使用动态图像大小的UITableViewCell

UITableViewCell通过第一个单元格设置的图像决定图像的尺寸。如果你加载的网络图片和占位符图像尺寸不一致,那么您可能会遇到奇怪的变形比例问题。下面的文章给出了解决此问题的方法:

http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/

处理图像刷新

SDWebimage默认情况下做了很好的缓存处理。它忽略通过HTTP服务器返回的所有类型的缓存控制头,并且没有时间限制地缓存返回的图像

它意味着你的url指向的图片是一成不变的。更好的做法是如果url指向的图片发生了改变,那么图片也应该变化。

在这种情况下,你可以使用SDWebImageRefreshCached标志。这将略微降低性能,但会尊重HTTP缓存控制头:


[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];

添加进度指示器

参考:https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage

安装

有三种方法把SDWebImage安装到您的项目中:

1)使用Cocoapods
2)复制所有文件到您的项目
3)作为静态库导入项目

SDWebImage ReadMe.md文档简单说明的更多相关文章

  1. README.md文档

    大标题 =================================== 大标题一般显示工程名,类似html的\<h1\> 你只要在标题下面跟上=====即可 中标题 ------- ...

  2. md文档使用小技巧

    简介 在日常写readme文档中,可能会遇到一些小问题,此处记录一下md文档编写过程中的一些小技巧. 插入图片 在md文档中插入图片,目前有三种方式,本地导入.网络导入.base64导入. 本地导入 ...

  3. Python之文件处理-批量修改md文档内容

    目录 Python之文件处理-批量修改md文档内容 Python之文件处理-批量修改md文档内容 #!/usr/bin/env python # -*- coding:utf-8 -*- import ...

  4. md文档的书写《二》

    对<md文档的书写一>的补充和部分归总 我使用的是Typora,快捷键可能有些片面,没有特殊说明,下文所有快捷键都是Typora编辑器下支持的快捷键,望知晓. 关于标题的书写补充 除了 ( ...

  5. Win10环境下,告别MarkdownPad,用Notepad++搭建编写md文档的环境

    1. 为什么抛弃MarkdownPad 2 ? MarkdownPad坊间号称 Windows 环境下最好用的markdown编辑器-EXO me??? 博主入MarkdownPad 2 坑就是因为这 ...

  6. python 实现 md文档自动编号

    目录 1. 原理 2. 运行方法 3. 效果 4. 代码 1. 原理 正则匹配对相应字符串进行替换 2. 运行方法 python md_convert.py [a.md, b.md,...] # 转换 ...

  7. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  8. 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】

    swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...

  9. WebApi(五)-Swagger接口文档①简单集成

    1,通过NuGet引用Swashbuckle 2,打开项目属性-->生成,勾选XML文档文件,保存 3,找到项目App_Start文件夹下WebApiConfig查找GetXmlComments ...

随机推荐

  1. Java线程池的几种实现 及 常见问题讲解

    工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能 ...

  2. protocol buffers的使用示例[z]

    [http://blog.csdn.net/zhu_xun/article/details/19397081] protocol buffers的使用示例 如果不了解protocol buffers, ...

  3. EhReport ,CReport改进版本,再次改进 ,V1.31

    取消了xlgrid依赖,带齐了第三方包. 安装更加方便. For D7 下载源码

  4. 20145225 《Java程序设计》第2周学习总结

    20145225<Java程序设计> 第2周学习总结 教材学习内容总结 3.1.1Java的类型 分为基本类型(Primitive type)和类类型(Class type) 基本类型: ...

  5. freeCodeCamp:Check for Palindromes

    如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文). 注意你需要去掉字符串多 ...

  6. maven 创建Hadoop程序

    这里用来将新建的maven project 放入到现有的maven working set 中,这样我们就能看到项目之间的层级关系 选择下面的程序 在父项目中创建公共的pom,在pom中维护项目所需要 ...

  7. ADO.NET Entity Framework学习笔录(一)

    今天开始学习了EF的相关内容,以前只知道ADO.NET,今天学习后觉得有必要写个相关的学习心得,今天就先写第一篇. 我们的再学习的过程中所用到的环境是Windows7+SQLServer2008+VS ...

  8. 【JSP】Tiles框架的基本使用

    Tiles介绍 Tiles 是一种JSP布局框架,主要目的是为了将复杂的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护. Tile ...

  9. (Python )模块、包

    本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...

  10. css3之过渡

    transition属性 属性 描述 transition 设置4个过渡效果属性值 transition-property 设置过渡的属性名 transition-duration 设置过渡效果时间, ...