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相关推荐

  1. SDWebImage使用——一个可管理远程图片加载的类库

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  2. iOS SDWebImage加载webp

    项目更新使用的最新版本的SDWebImage, 需配置如下: Build Settings -> preprocessor macros -> 添加 SD_WEBP=1

  3. Swift之SDWebImage第三方框架

    在学习Swift过程中,最害怕的使用了OC的第三方框架 好不容易配置成功了,却出现了意外的Bug [UIImageView setImageWithURL:]: unrecognized select ...

  4. 源码阅读:SDWebImage(六)——SDWebImageCoderHelper

    该文章阅读的SDWebImage的版本为4.3.3. 这个类提供了四个方法,这四个方法可分为两类,一类是动图处理,一类是图像方向处理. 1.私有函数 先来看一下这个类里的两个函数 /**这个函数是计算 ...

  5. SDWebImage使用,图片加载和缓存

    本文转载至 http://blog.163.com/wzi_xiang/blog/static/659829612012111402812726/ 清除缓存: [[SDImageCache share ...

  6. SDWebImage开源库阅读分析(全)

    汇总记录: 本文基于SDWebImage 4.2.3版本进行分析和整理(链接地址). 整体目录结构: SDWebImage |----SDWebImageCompat 处理不同平台(iOS.TV.OS ...

  7. SDwebimage使用原理(转载)

    概述 SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理. ...

  8. SDWebImage中文说明

    前端时间想详细的了解下AFNetworking库,所以想着看看官方的API吧.想想既然看看就做下笔记吧,既然做了笔记为何不试着翻译一下呢.然后就有了之前的文章<AFNetworking说明书&g ...

  9. 模仿SDWebImage实现异步加载图片

    模仿SDWebImage实现异步加载图片 SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的. 注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:) 源 ...

最新文章

  1. Java项目:新闻发布系统(java+Springboot+ssm+mysql+maven)
  2. mysql 5.5 5.6差异,MySQL5.5和MySQL5.6授权区别
  3. 前端优化方案-JavaScript 优化方案 收藏 此文于2010-06-04被推荐到CSDN首页
  4. how is batch operation handled in backend
  5. wpf 切换搜狗输入法英文_搜狗输入法全新升级手写功能,中英数字自由写,告别切换丨本周新闻...
  6. android_studio上传svn的时候那些不提交
  7. thinkpad s3 安装win8 kali双系统笔记
  8. ruby hash方法_Ruby中带有示例的Hash.key?(obj)方法
  9. 远程计算机已结束连接解决方法
  10. LeetCode -- Sort List
  11. 如何判断Linux服务器是否被入侵?
  12. 一些控件中的属性。(未完)
  13. java指标计算_java – 使用JMH计算指标
  14. 感悟:决定一个系统走势是多因素构成,而非单一因素决定
  15. c语言数组用户注册登入管理系统_[内附完整源码和文档] 基于JAVA的干部档案管理系统...
  16. 芯片春秋: ARM前世今生
  17. 有关javaSE下载时,环境配置path不成功,在cmd命令中java,javac,java -version出现不是内部或外部命令的现象处理
  18. WebVTT字幕格式
  19. 零基础自学新概念英语的方法
  20. tp6动态连接数据库

热门文章

  1. 世界上手速最快的仿人机器人诞生在韩国!魔术师也要失业了!
  2. 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
  3. 潘建伟团队再登Nature:全球首次实现器件无关量子随机数,量子保密通信安全再升级...
  4. 假如我是超级卷王......
  5. 月薪 5 万清华姚班 NOI 金牌得主在线征友被群嘲,当代互联网相亲有多难
  6. 出身寒门,如何改变命运?
  7. 12月31日写成13月1日引发重大 Bug,程序员新年就要被“祭天”?
  8. 新职业风口已至!人社部宣布这10个职业缺口近千万!
  9. 如何编辑PDF文件,怎么修改PDF中的文字
  10. 进程间数据传递:Queue,Pipe 进程间数据共享:Manager