SDWebImage
2019独角兽企业重金招聘Python工程师标准>>>
#import "ViewController.h" #import "UIImageView+WebCache.h" #import "SDWebImageManager.h" #import "SDWebImageDownloader.h" #import "UIImage+GIF.h" #import "NSData+ImageContentType.h"@interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {[self download]; }//1.下载图片且需要获取下载进度 /*** 1:当需要获取下载进度的时候可以使用此方法,其中optiobs如果什么都不做,可以传参数0,optiobs是一个位移枚举,可以通过按位或 | 来并列添加参数 2:SDImageCacheType缓存的类型:此方法默认做了内存缓存,与磁盘缓存,第一次是直接下载,然后点击的时候是从内存缓存中读取,当内存缓存不存在的时候,再从磁盘缓存读取**/ //内存缓存&磁盘缓存 -(void)download {[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] placeholderImage:[UIImage imageNamed:@"Snip20160221_306"] options:SDWebImageCacheMemoryOnly | SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {switch (cacheType) {case SDImageCacheTypeNone:NSLog(@"直接下载");break;case SDImageCacheTypeDisk:NSLog(@"磁盘缓存");break;case SDImageCacheTypeMemory:NSLog(@"内存缓存");break;default:break;}}];NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]);}//2.只需要简单获得一张图片,不设置/*** 1:默认SDImageCacheType是内存缓存&磁盘缓存。如果只是简单下载一张图片,就用如下的方法:[SDWebImageManager sharedManager] downloadImageWithURL**/-(void)download2 {[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {NSLog(@"%f",1.0 * receivedSize / expectedSize);} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {//得到图片self.imageView.image = image;}]; }//3.不需要任何的缓存处理 /*** 没有做任何缓存处理**/-(void)download3 {//data:图片的二进制数据[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {[[NSOperationQueue mainQueue]addOperationWithBlock:^{self.imageView.image = image;}];}]; }//4.播放Gif图片 /***播放Gif图片*/ -(void)gif {NSLog(@"%s",__func__);//self.imageView.image = [UIImage imageNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"];UIImage *image = [UIImage sd_animatedGIFNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"];self.imageView.image = image; }-(void)type {NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/Snip20160221_306.png"];NSString *typeStr = [NSData sd_contentTypeForImageData:imageData];NSLog(@"%@",typeStr); } @end
二:当内存产生警告的时候,清除缓存
#import "AppDelegate.h" #import "SDWebImageManager.h"@interface AppDelegate ()@end@implementation AppDelegate-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application {//1.清空缓存//clear:直接删除缓存目录下面的文件,然后重新创建空的缓存文件//clean:清除过期缓存,计算当前缓存的大小,和设置的最大缓存数量比较,如果超出那么会继续删除(按照文件了创建的先后顺序)//过期时间:7天[[SDWebImageManager sharedManager].imageCache clearMemory];//2.取消当前所有的操作[[SDWebImageManager sharedManager] cancelAll];//3.最大并发数量 == 6//4.缓存文件的保存名称如何处理? 拿到图片的URL路径,对该路径进行MD5加密//5.该框架内部对内存警告的处理方式? 内部通过监听通知的方式请你缓存//6.该框架进行缓存处理的方式:可变字典--->NSCache//7.如何判断图片的类型: 在判断图片类型的时候,只匹配第一个字节//8.队列中任务的处理方式:FIFO//9.如何下载图片的? 发送网络请求下载图片,NSURLConnection//10.请求超时的时间 15秒//[NSData dataWithContentsOfURL:<#(nonnull NSURL *)#>] } @end
三:SDWebImage的结构:最顶层的父类是SDWebImageManager,其下有两个子类如图所示
四:知识点总结: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图片->NSData5-2 根据该Data创建一个图片数据源(NSData->CFImageSourceRef)5-3 计算该数据源中一共有多少帧,把每一帧数据取出来放到图片数组中5-4 根据得到的数组+计算的动画时间-》可动画的image[UIImage animatedImageWithImages:images duration:duration];*/06 如何判断当前图片类型,只判断图片二进制数据的第一个字节+ (NSString *)sd_contentTypeForImageData:(NSData *)data;07 内部如何进行缓存处理?使用了NSCache类,使用和NSDictionary类似08 沙盒缓存图片的命名方式为对该图片的URL进行MD5加密 echo -n "url" |MD509 当接收到内存警告之后,内部会自动清理内存缓存10 图片的下载顺序,默认是先进先出的:FIFO原则
转载于:https://my.oschina.net/6104zhang/blog/776343
SDWebImage相关推荐
- SDWebImage使用——一个可管理远程图片加载的类库
SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...
- iOS SDWebImage加载webp
项目更新使用的最新版本的SDWebImage, 需配置如下: Build Settings -> preprocessor macros -> 添加 SD_WEBP=1
- Swift之SDWebImage第三方框架
在学习Swift过程中,最害怕的使用了OC的第三方框架 好不容易配置成功了,却出现了意外的Bug [UIImageView setImageWithURL:]: unrecognized select ...
- 源码阅读:SDWebImage(六)——SDWebImageCoderHelper
该文章阅读的SDWebImage的版本为4.3.3. 这个类提供了四个方法,这四个方法可分为两类,一类是动图处理,一类是图像方向处理. 1.私有函数 先来看一下这个类里的两个函数 /**这个函数是计算 ...
- SDWebImage使用,图片加载和缓存
本文转载至 http://blog.163.com/wzi_xiang/blog/static/659829612012111402812726/ 清除缓存: [[SDImageCache share ...
- SDWebImage开源库阅读分析(全)
汇总记录: 本文基于SDWebImage 4.2.3版本进行分析和整理(链接地址). 整体目录结构: SDWebImage |----SDWebImageCompat 处理不同平台(iOS.TV.OS ...
- SDwebimage使用原理(转载)
概述 SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理. ...
- SDWebImage中文说明
前端时间想详细的了解下AFNetworking库,所以想着看看官方的API吧.想想既然看看就做下笔记吧,既然做了笔记为何不试着翻译一下呢.然后就有了之前的文章<AFNetworking说明书&g ...
- 模仿SDWebImage实现异步加载图片
模仿SDWebImage实现异步加载图片 SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的. 注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:) 源 ...
最新文章
- Java项目:新闻发布系统(java+Springboot+ssm+mysql+maven)
- mysql 5.5 5.6差异,MySQL5.5和MySQL5.6授权区别
- 前端优化方案-JavaScript 优化方案 收藏 此文于2010-06-04被推荐到CSDN首页
- how is batch operation handled in backend
- wpf 切换搜狗输入法英文_搜狗输入法全新升级手写功能,中英数字自由写,告别切换丨本周新闻...
- android_studio上传svn的时候那些不提交
- thinkpad s3 安装win8 kali双系统笔记
- ruby hash方法_Ruby中带有示例的Hash.key?(obj)方法
- 远程计算机已结束连接解决方法
- LeetCode -- Sort List
- 如何判断Linux服务器是否被入侵?
- 一些控件中的属性。(未完)
- java指标计算_java – 使用JMH计算指标
- 感悟:决定一个系统走势是多因素构成,而非单一因素决定
- c语言数组用户注册登入管理系统_[内附完整源码和文档] 基于JAVA的干部档案管理系统...
- 芯片春秋: ARM前世今生
- 有关javaSE下载时,环境配置path不成功,在cmd命令中java,javac,java -version出现不是内部或外部命令的现象处理
- WebVTT字幕格式
- 零基础自学新概念英语的方法
- tp6动态连接数据库
热门文章
- 世界上手速最快的仿人机器人诞生在韩国!魔术师也要失业了!
- 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
- 潘建伟团队再登Nature:全球首次实现器件无关量子随机数,量子保密通信安全再升级...
- 假如我是超级卷王......
- 月薪 5 万清华姚班 NOI 金牌得主在线征友被群嘲,当代互联网相亲有多难
- 出身寒门,如何改变命运?
- 12月31日写成13月1日引发重大 Bug,程序员新年就要被“祭天”?
- 新职业风口已至!人社部宣布这10个职业缺口近千万!
- 如何编辑PDF文件,怎么修改PDF中的文字
- 进程间数据传递:Queue,Pipe 进程间数据共享:Manager