SDWebimage 、AFN 、ASI ----- 快捷使用

1.SDWebimage

1> SDWebimage的缓存机制

  1. UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。
  2. SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类, SDImageCache: queryDiskCacheForKey:delegate:userInfo:用来从缓存根据CacheKey查找图片是否已经在缓存中
  3. 如果内存中已经有图片缓存, SDWebImageManager会回调SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:
  4. 而 UIImageView+WebCache 则回调SDWebImageManagerDelegate:  webImageManager:didFinishWithImage:来显示图片。
  5. 如果内存中没有图片缓存,那么生成 NSInvocationOperation 添加到队列,从硬盘查找图片是否已被下载缓存。
  6. 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 
    notifyDelegate:
  7. 如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:进而回调展示图片。
  8. 如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调 
    imageCache:didNotFindImageForKey:userInfo:
  9. 共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。
  10. 图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。
  11. connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。
  12. connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。
  13. 图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。
  14. 在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。
  15. imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。
  16. 通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。
  17. 将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。
  18. 写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程。
  19. 如果是在iOS上运行,SDImageCache 在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification 以及  UIApplicationWillTerminateNotification,在内存警告的时候清理内存图片缓存,应用结束的时候清理过期图片。
  20. SDWebImagePrefetcher 可以预先下载图片,方便后续使用。

2.AFN

1>实现原理

AFN的直接操作对象AFHTTPClient不同于ASI,是一个实现了NSCoding和NSCopying协议的NSObject子类。 AFHTTPClient是一个封装了一系列操作方法的“工具类”,处理请求的操作类是一系列单独的,基于NSOperation封装 的,AFURLConnectionOperation的子类。AFN的示例代码中通过一个静态方法,使用dispatch_once()的方式创建 AFHTTPClient的共享实例,这也是官方建议的使用方法。在创建AFHTTPClient的初始化方法中,创建了OperationQueue并 设置一系列参数默认值。在getPath:parameters:success:failure方法中创建NSURLRequest,以 NSURLRequest对象实例作为参数,创建一个NSOperation,并加入在初始化发方中创建的NSOperationQueue。以上操作都 是在主线程中完成的。在NSOperation的start方法中,以此前创建的NSURLRequest对象为参数创建NSURLConnection 并开启连结。

2> 传递指针 如何使一个方法返回多个返回值

3.ASI

#warning 简单介绍ASI,和AFN进行比较

时间: 2024-10-24 15:49:53

SDWebimage 、AFN 、ASI ----- 快捷使用的相关文章

[ 流行的网络框架 ] AFN & ASI

1.AFN & ASI(早已经停止更新,但现在许多公司也在使用.) AFNetWorking地址:https://github.com/AFNetworking/AFNetworking ASIHTTPRequest地址:https://github.com/paytronix/ASIHTTPRequest 2.AFN与ASI对比 -- AFN1. 基于 NSURLConnection & NSURLSession 进行的封装2. 使用简单3. 提供了自动的序列化 & 反序列化支持

AFNetworking & SDWebImage

这篇文章是讲AFN & ASI 区别的 http://blog.sina.com.cn/s/blog_a0f3ea980101c0yo.html 这两天在搞下载图片须要3des解密,须要改AFNetworing 和SDWebImage; afn #pragma mark - AFURLRequestSerialization---json序列化 这个是解析json 的, 在这里解密; - (id)responseObjectForResponse:(NSURLResponse *)respons

网路总结02-ASI和AFN

上一篇讲解了HTTP协议和NSURLConnection    网址:http://blog.csdn.net/hepburn_/article/details/47150589 现在讲讲ASI和AFN: ASI: AFN: ASI网络状态监控: AFN网络状态监控: ASI和AFN的区别: 4,AFN的特色: 1>使用简单: 2>自带了网络监控功能: 版权声明:本文为博主原创文章,未经博主允许不得转载.

iOS问题#解决方案#之关于“application/x-www-form-urlencoded;charset=utf-8” not supported

http://www.cnblogs.com/ChenYilong http://www.cnblogs.com/ChenYilong 如果你用的是AFN/ASI,那得修改源代码了,因为AFN/ASI默认不支持"application/x-www-form-urlencoded;charset=utf-8"这种内容类型那你去ASI源码里面搜索Content type,看能不能改东西再不行,那就是你们服务器人员的问题了 http://www.cnblogs.com/ChenYilong

IOS开发使用NSURLConnection、NSURLSession、AFN、ASI四种方式实现HTTP请求

概括:HTTP请求可以使用NSURLConnection.NSURLSession.AFN.ASI等方式实现,其中又包括了get.post两种请求方式和同步.异步两种程序执行方式. NSURLConnection 1 get方式的同步请求 /** *  get同步请求 */ -(void) getSynch{ // 获取URL NSURL *url = [[NSURL alloc] initWithString:@"http://localhost:8070/MJServer/login?use

iOS中ASI和AFN的区别

一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高于 AFN 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string 2> AFN提供了多种对服务器数据处理的方式 * JSON处理 * XML处理 * 其他处理 三.监听请求的过程 1> AFN提供了success和failure两个blo

iOS核心笔记——网络编程-ASI与AFN的区别

一.底层实现: 1> AFN的底层基于OC的NSURLConnection和NSURLSession: 2> ASI的底层基于纯C语言的CFNetwork框架: 3> ASI的运行性能 高于 AFN. 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string: 2> AFN提供了多种对服务器数据处理的方式: JSON处理: XML处理: 其他处理. 三.监听请求的过程: 1> AFN提供了success和failure两

开发经验: 对AFN和ASI各自使用方法及区别的总结

经过多年的iOS开发, 现总结一下HTTP协议下的两大网络处理第三方框架的使用心得 首先来说下AFNetworking: 一.2大管理对象1.AFHTTPRequestOperationManager* 对NSURLConnection的封装 2.AFHTTPSessionManager* 对NSURLSession的封装 二.AFHTTPRequestOperationManager的具体使用1.创建管理者AFHTTPRequestOperationManager \*mgr = [AFHTT

IOS ASI和AFN的 区别

一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwork框架3> ASI的运行性能 高于 AFN 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string2> AFN提供了多种对服务器数据处理的方式* JSON处理* XML处理* 其他处理 三.监听请求的过程 1> AFN提供了success和failure两个block来监听请