SDWebImage基本使用

###4.第三方框架

(1)SDWebImage基本使用

```objc

01 设置imageView的图片

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"]];

02 设置图片并计算下载进度

//下载并设置图片

/*

第一个参数:要下载图片的url地址

第二个参数:设置该imageView的占位图片

第三个参数:传一个枚举值,告诉程序你下载图片的策略是什么

第一个block块:获取当前图片数据的下载进度

receivedSize:已经下载完成的数据大小

expectedSize:该文件的数据总大小

第二个block块:当图片下载完成之后执行该block中的代码

image:下载得到的图片数据

error:下载出现的错误信息

SDImageCacheType:图片的缓存策略(不缓存,内存缓存,沙盒缓存)

imageURL:下载的图片的url地址

*/

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {

//计算当前图片的下载进度

NSLog(@"%.2f",1.0 *receivedSize / expectedSize);

} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

}];

03 系统级内存警告如何处理(面试)

//取消当前正在进行的所有下载操作

[[SDWebImageManager sharedManager] cancelAll];

//清除缓存数据(面试)

//cleanDisk:删除过期的文件数据,计算当前未过期的已经下载的文件数据的大小,如果发现该数据大小大于我们设置的最大缓存数据大小,那么程序内部会按照按文件数据缓存的时间从远到近删除,知道小于最大缓存数据为止。

//clearMemory:直接删除文件,重新创建新的文件夹

//[[SDWebImageManager sharedManager].imageCache cleanDisk];

[[SDWebImageManager sharedManager].imageCache clearMemory];

04 SDWebImage默认的缓存时间是1周

05 如何播放gif图片

/*

5-1 把用户传入的gif图片->NSData

5-2 根据该Data创建一个图片数据源(NSData->CFImageSourceRef)

5-3 计算该数据源中一共有多少帧,把每一帧数据取出来放到图片数组中

5-4 根据得到的数组+计算的动画时间-》可动画的image

[UIImage animatedImageWithImages:images duration:duration];

*/

06 如何判断当前图片类型

+ (NSString *)sd_contentTypeForImageData:(NSData *)data;

1.SDWebImage相关知识点补充

01.SDWebImage接收到内存警告的时候如何处理?采用监听系统警告通知的方式处理,接收到警告后清空缓存

02.SDWebImage队列最大并发数为6

03.SDWebImage内部设置下载图片超时时间为15m

04.SDWebImage图片下载操作使用了NSURLConnection类发送网络请求实现

05.SDWebImage内部使用NSCache类来进行缓存处理

06.SDWebImage内部如何判断图片类型?判断该图片二进制数据的第一个字节

07.SDWebImage做沙盒缓存时图片的命名机制是拿到图片的URL后直接对URL进行MD5加密

2.NSCache知识点补充

01.NSCache是专门用来进行缓存处理的,

02.NSCache简单介绍:

2-1 NSCache是苹果官方提供的缓存类,具体使用和NSDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存

2-2 苹果官方解释NSCache在系统内存很低时,会自动释放对象(但模拟器演示不会释放)

建议:接收到内存警告时主动调用removeAllObject方法释放对象

2-3 NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁

2-4 NSCache的Key只是对对象进行Strong引用,不是拷贝

03 属性介绍:

name:名称

delegete:设置代理

totalCostLimit:缓存空间的最大总成本,超出上限会自动回收对象。默认值为0,表示没有限制

countLimit:能够缓存的对象的最大数量。默认值为0,表示没有限制

evictsObjectsWithDiscardedContent:标识缓存是否回收废弃的内容

04 方法介绍

- (void)setObject:(ObjectType)obj forKey:(KeyType)key;//在缓存中设置指定键名对应的值,0成本

- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;//在缓存中设置指定键名对应的值,并且指定该键值对的成本,用于计算记录在缓存中的所有对象的总成本,出现内存警告或者超出缓存总成本上限的时候,缓存会开启一个回收过程,删除部分元素

- (void)removeObjectForKey:(KeyType)key;//删除缓存中指定键名的对象

- (void)removeAllObjects;//删除缓存中所有的对象

时间: 2024-08-27 04:04:13

SDWebImage基本使用的相关文章

李洪强详细介绍SDWebImage

SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类,以支持从远程服务器下载并缓存图片的功能.它具有以下功能: 提供UIImageView的一个分类,以支持网络图片的加载与缓存管理 一个异步的图片加载器 一个异步的内存+磁盘图片缓存 支持GIF图片 支持WebP图片 后台图片解压缩处理 确保同一个URL的图片不被下载多次 确保虚假的URL不会被反复加载 确保下载及缓存时,主线程不被阻塞 从github上对SDWebImage使用情况就可以看出,SDWebImage在

iOS之SDWebImage清理缓存

.找到 SDWebImage找到SDImageCache类 添加如下方法 - (float)checkTmpSize { float totalSize = 0; NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:_diskCachePath]; for (NSString *fileName in fileEnumerator) { NSString *filePat

多线程与网络之SDWebImage和NSCache

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

SDWebImage源码学习笔记

//  这是我第二次学习sdwebimage源码,第一次学习吸收的很少,看不懂啊.第二次看个50%,在此记录一点笔记. 首先是目录: 1.SDWebImage目录 里面有两个类,SDWebImageCompat.h 里面有个根据屏幕设置图片scale的方法 SDWebImageOperation.h 声明了一个协议,取消操作 (可以理解这一个放的公共方法目录) 2.Downloader 目录(顾名思义,下载操作相关的目录)里面有两个关键的类 SDWebImageDownloaderOperati

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];             //请求网络地址数据的同步方法             //因为这个方法在子线程(全局队列)中执行,所以不需要考虑死线程的问题             SDWebImageManager *manager = [SDWebImageManager sharedManager];              [manag

NSURLConnection / NSURLSession/ SDWebImage

1. NSURLConnection (iOS9开始被弃用)=========================================== 此类的对象加载一个URL请求对象,通过异步/同步的方式发送请求,并获得响应. 此类位于Foundation框架下,继承自NSObject ------------------------------ 异步/同步?    通讯方式 异步:在请求发送后,无需等待响应结果,而是可以继续后续其他操作,该请求的响应在回调方法中处理(通常用到的代理方法或bloc

SDWebImage使用,图片加载和缓存

SDWebImage使用,图片加载和缓存 2012-12-14 12:28:12|  分类: iOS|举报|字号 订阅 下载LOFTER我的照片书  | 清除缓存: [[SDImageCache sharedImageCache] clearDisk]; [[SDImageCache sharedImageCache] clearMemory]; 来自:http://blog.csdn.net/sqc3375177/article/details/7714573 SDWebImage托管在git

iOS之SDWebImage的使用

第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UIImageView+WebCache.h" 第三步,调用sd_setImageWithURL:方法缓存图片,注意,这就是新版本的新方法,旧方法是setImageWithURL:.下面将几个方法都介绍一下. 1. sd_setImageWithURL: 1 2 //图片缓存的基本代码,就是这么简单   

iOS 用 SDWebImage 清理图片缓存

转自:http://www.cnblogs.com/qianLL/p/5389079.html 具体效果如下 1.找到 SDWebImage找到SDImageCache类 添加如下方法 - (float)checkTmpSize { float totalSize = 0; NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:_diskCachePath]; for (N

使用SDWebImage加载大量图片后造成内存泄露的解决办法 转载

使用SDWebImage加载大量图片后造成内存泄露的解决办法 时间:2015-07-21 14:26:47      阅读:5885      评论:0      收藏:0      [点我收藏+] SDWebImage的知名度就不用说了,github上近10k的star,国内外太多的App使用其进行图片加载. 但是最近在使用过程中发现,在UITableView中不断加载更多的内容,使用SDWebImage会造成内存占用越来越大,导致memory warning最终terminate,稍微找了下