sdwebimage

SDWebImage

纵饮孤独 提交于 2020-03-07 18:56:32
SDWebImage内部实现过程 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:. 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。 SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调

SDWebImage源码解读(四)UIButton+WebCache

早过忘川 提交于 2020-03-07 18:53:45
UIButton+WebCache .h 文件 1.获取当前button的图片url。 - (nullable NSURL *)sd_currentImageURL; 2.根据不同的状态获取图片url。 - (nullable NSURL *)sd_imageURLForState:(UIControlState)state; 3.设置按钮不同状态的url,然后异步加载,并且缓存。 1 - (void)sd_setImageWithURL:(nullable NSURL *)url 2 forState:(UIControlState)state; 3 4 - (void)sd_setImageWithURL:(nullable NSURL *)url 5 forState:(UIControlState)state 6 placeholderImage:(nullable UIImage *)placeholder; 7 8 - (void)sd_setImageWithURL:(nullable NSURL *)url 9 forState:(UIControlState)state 10 placeholderImage:(nullable UIImage *)placeholder 11 options:(SDWebImageOptions)options; 12 13 -

SDWebImage4.0.0 源码解析

放肆的年华 提交于 2020-03-07 18:38:03
在开发 iOS 的客户端应用时,经常需要从服务器下载图片,虽然系统提供了下载工具:NSData、NSURLSession等等方法,但是考虑到图片下载过程中,需要考虑的因素比较多,比如:异步下载、图片缓存、错误处理、编码解码等,以及实际需要中根据不同网络加载不同画质的图片等等需求,因此下载操作不是一个简单的下载动作就可以解决。 针对上述问题,目前常用的开源库就是 SDWebImage ,它很好的解决了图片的异步下载、图片缓存、错误处理等问题,得到了广泛的应用,使得设置 UIImageView 、 UIButton 对象的图片十分方便。本文就从源码的角度,剖析一下这款优秀的开源库的具体实现。 类结构图 SDWebImage 的源码的类结构图和下载流程图在官方的 说明文档 里有介绍,通过 UML 类结构图详细的介绍了该框架的内部结构,以及通过流程图介绍了具体的下载过程。 下图是我总结的 SDWebImage 的结构图,简单的把 SDWebImage 源码文件按照功能进行了划分,方便在阅读源码时,能快速的对源码有一个总体的认识,加快阅读效率。 ![](//upload-images.jianshu.io/upload_images/1843940-c51585b28704fae9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

iOS SDWebImage

给你一囗甜甜゛ 提交于 2020-03-07 18:34:41
iOS之SDWebImage的实现原理 通过NSOperationQueue和NSOperation进行图片下载; 利用一些GCD函数对GIF图片进行解析; 利用URL作为key,NSOperation作为value; 利用URL作为key,UIImage作为value; SDWebImage的用法 可以利用coaoapod 导入工程 在需要的地方导入头文件 #import "UIImageView+WebCache.h" 调用sd_setImageWithURL:方法缓存图片 1.sd_setImageWithURL: //图片缓存的基本代码,就是这么简单 [self.image1 sd_setImageWithURL:imagePath1]; 2. sd_setImageWithURL: completed: //用block 可以在图片加载完成之后做些事情 [self.image2 sd_setImageWithURL:imagePath2 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { NSLog(@"这里可以在图片加载完成之后做些事情"); }]; 3. sd_setImageWithURL: placeholderImage: /

2016-03-16 sdwebimage

南楼画角 提交于 2020-03-07 18:34:10
SDWebImage框架底层讲解 一. 异步加载图片 1.搭建界面&数据准备 数据准备 @interface AppInfo : NSObject /// App 名称 @property (nonatomic, copy) NSString *name; /// 图标 URL @property (nonatomic, copy) NSString *icon; /// 下载数量 @property (nonatomic, copy) NSString *download; + (instancetype)appInfoWithDict:(NSDictionary *)dict; /// 从 Plist 加载 AppInfo + (NSArray *)appList; @end + (instancetype)appInfoWithDict:(NSDictionary *)dict { id obj = [[self alloc] init]; [obj setValuesForKeysWithDictionary:dict]; return obj; } /// 从 Plist 加载 AppInfo + (NSArray *)appList { NSURL *url = [[NSBundle mainBundle] URLForResource:@"apps.plist"

第三方框架SDWebImage学习

倾然丶 夕夏残阳落幕 提交于 2020-03-07 18:32:47
1. 图片文件缓存的时间有多长:1周 _maxCacheAge = kDefaultCacheMaxCacheAge 2. SDWebImage 的内存缓存是用什么实现的? NSCache! 3. SDWebImage 的最大并发数是多少? maxConcurrentDownloads = 6 是程序固定死了,可以通过属性进行调整! 4. SDWebImage 支持动图吗?GIF 支持 #import <ImageIO/ImageIO.h> [UIImage animatedImageWithImages:images duration:duration]; 5. SDWebImage是如何区分不同格式的图像的 根据图像数据第一个字节来判断的! PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式! JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好! GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的! 6. SDWebImage 缓存图片的名称是怎么确定的 如果单纯使用 文件名保存,重名的几率很高! 使用 MD5 的散列函数!对完整的 URL 进行 md5,结果是一个 32 个字符长度的字符串! 7. SDWebImage 的内存警告是如何处理的! 利用通知中心观察

SDWebImage的总结

那年仲夏 提交于 2020-03-07 18:31:46
SDWebImage 1> 图片文件缓存的时间有多长:1周 _maxCacheAge = kDefaultCacheMaxCacheAge 2> SDWebImage 的内存缓存是用什么实现的? NSCache 3> SDWebImage 的最大并发数是多少? maxConcurrentDownloads = 6 是程序固定死了,可以通过属性进行调整! 4> SDWebImage 支持动图吗?GIF #import <ImageIO/ImageIO.h> [UIImage animatedImageWithImages:images duration:duration]; 5> SDWebImage是如何区分不同格式的图像的 根据图像数据第一个字节来判断的! PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式! JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好! GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的! 6> SDWebImage 缓存图片的名称是怎么确定的! md5 如果单纯使用 文件名保存,重名的几率很高! 使用 MD5 的散列函数!对完整的 URL 进行 md5,结果是一个 32 个字符长度的字符串! 7> SDWebImage 的内存警告是如何处理的!

iOS 第三方框架-SDWebImage

家住魔仙堡 提交于 2020-03-07 18:30:28
iOS中著名的牛逼的网络图片处理框架。包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等。用法极其简单,功能十分强大,大大提高了网络图片的处理效率。国内超过90%的iOS项目都有它的影子。 项目地址 https://github.com/rs/SDWebImage 基本处理原理: 1.面试题 1> 如何防止一个url对应的图片重复下载 * 查看“基本处理原理”上图 2> SDWebImage的默认缓存时长是多少? * 1个星期 3> SDWebImage底层是怎么实现的? * 查看“基本处理原理”上图 常用方法 - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; -

IOS中CocoaPods安装与使用

霸气de小男生 提交于 2020-02-26 08:10:08
网上有很多文章关于 cocoaPods配置文章,其实cocoaPods配置并不难,只是比较繁琐而已,我也是照着网站文章一步步搭建配置成功。写这篇文章的目的就是像做笔记一样,便于以后用的时候好回忆。废话不多说,直接开始。 CocoaPods在Ios中强大的功能,我就不再这里一一解说(不清楚的盆友,可以搜索一下) 一:安装前提 1:必须安装Xcode 2: 必须安装 xcode 中 command Line 二:开始安装cocoaPods (我假设大家都安装第一步) 1: 下载 /安装 cocoapods ①:打开终端 输入命令 ②:在终端上直接输入 gem install cocoapods 三:使用CocoaPods 1:你先随便在XCode中建一个项目。 2:打开终端,使用cd命令定位到需要使用CocoaPods的项目根路径。 3: 现在需要在项目中建立Podfile文件 (这个是 CocoaPods 固定规则) 步骤①:使用创建Podfile的命令 touch Podfile 步骤②: 然后编辑Podfile文件,命令 open -e Podfile 步骤③: 在弹出的编辑界面中输入(你要下载的内容) platform :ios, '7.0' pod 'Reachability', '~> 3.2' pod 'SDWebImage', '~> 3.7.3' pod

How to load images from JSON into UIImageView using SDWebImage?

ぃ、小莉子 提交于 2020-02-03 01:30:33
问题 I'm trying to display images from a JSON url in an UIImageView, similar to Tinder, using SDWebImage. Every tutorial I've come across only deal with downloading either single image urls (@"suchandsuch.png"), or displaying the images inside of tableviews (which I do not want to do). Not sure what I am doing wrong. My sample code: ViewController.m -(void)viewDidLoad{ [super viewDidLoad]; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:@"http://www