美文网首页
AFN2.X/3.X网络请求原理

AFN2.X/3.X网络请求原理

作者: b470b9fc7145 | 来源:发表于2017-09-03 00:01 被阅读28次

AFURLConnectionOperation原理:
1:首先我们可以看到他创建了一个单例线程,用来处理AFN发起的所有请求任务,runloop一直运行,用来处理请求完成后回调(代理)。当然,现成也跟随着一个runLoop,AFN将这个runloop的模式设置成了NSDefaultRunLoopMode。但NSDefaultRunLoopMode是无法检测到connection的状 态的。这说明了,AFN将不会在这该线程处理connection完成后的UI刷新等工作,而是会将数据抛给主线程,让主线程去完成UI的刷新。
2:我们可以看到该类通过接受请求的字符串,创建了URLRequest以及NSURLConnection对象。从而去进行请求。
3:实现文件多次使用到了锁,可以保证数据的安全。当然他也实现了几个数据的NSCoping协议。
4:请求的创建、进行、取消、完成、暂停恢复、异常等问题及状态的控制。这里讲一下暂停和恢复。暂停实际上将网络请求取消掉了。但是由于实现了nscoping协议,已经下载到数据得以保存下来。下次进行相同请求的时候,我们会将已经下载到的数据的节 点一起发送给服务器,告诉服务器这些部门的数据我们不需要了,服务器根据我发送的返回节点给我返回相应的数据即可。从而实现了暂停和恢复功能,也就是断点 续传。
5:operation方法的重写。自行google,这里不赘述。
6:状态的各种控制方法的实现以及发送状态改变的通知

Thread.png

注意

  1. AFHTTPRequestOperation is a subclass of AFURLConnectionOperation
  2. AFURLConnectionOperation
  3. AFURLConnectionOperation重写父类的start方法,在里面开启一个线程.
  4. AFN 的做法是把网络请求的解析都放在同一个子线程中进行(子线程调用异步接口,子线程需要有Runloop去接收异步回调事件,这里也可以每个请求都新建一条带有Runloop的线程去侦听回调,但这一点好处都没有,既然是异步回调,除了处理回调内容,其他时间线程都是空闲可利用的,所有请求共用一个响应的线程就够了。)
  5. 由于NSUrlSession参考了AF的2.x的优点,自己维护了一个线程池,做Request线程的调度与管理,所以在AF3.x中,没有了常驻线程,都是用的时候run,结束的时候stop。

http://www.jianshu.com/p/d0e98985c784
http://www.jianshu.com/p/6b3d0f3a7bac
深入研究 Runloop 与线程保活
AFNetworking2.0源码解析<一>
iOS RunLoop 探究

tips

接收回调的单利线程是通过重写start方法加进去的.

//NSOperation方法
- (void)start;
- (void)cancel;
//

相关文章

  • AFN2.X/3.X网络请求原理

    AFURLConnectionOperation原理:1:首先我们可以看到他创建了一个单例线程,用来处理AFN发起...

  • AFN2.x分析

    AFN2.x afn2.x 用单利AFHTTPRequestOperationManager对象请求manager...

  • 贼好用的 AFN3.x 网络请求封装,支持HTTPS验证,多图上

    AFNetworking 我项目里面的网络请求是一外包大牛基于AFN2.x封装的基本网络请求,感觉其封装的贼好,对...

  • iOS RunLoop 探究

    RunLoop常见用法 AFN AFN2.x中把网络请求全部都放在一个子线程中进行。由于子线程运行完任务后就会自动...

  • 收集优秀的第三方

    网络请求 1、AFNetworking2、AFNetworking 3.x 与YYCache封装,一句代码搞定数据...

  • 网络请求原理

    一、网络框架 1、ASIHttpRequest:底层用C实现,基于CFNetwork2、AFNetwork:3.0...

  • Okhttp与Retrofit技术详解

    知识点汇总: 一:Retrofit项目介绍与实现网络请求原理 二:Okhttp的项目介绍与实现网络请求的原理 三:...

  • iOS - AFNetworking 网络请求报3840“Gar

    问题描述 新App切换到正式环境时,网络请求(AFNetworking 3.x)返回错误信息“Garbage at...

  • iOS面试题(九)

    1、AFN2.x为什么添加一条常驻线程? AFN2.0里面把每一个网络请求的发起和解析都放在了一个线程里执行。正常...

  • 网络框架的选择

    网络请求的原理 网络请求在本质上可以理解为客户端发起请求(Request),然后服务器返回数据(Response)...

网友评论

      本文标题:AFN2.X/3.X网络请求原理

      本文链接:https://www.haomeiwen.com/subject/dtldjxtx.html