AFNetWorking请求过程和注意事项

AFNetWorking请求过程和注意事项,持续更新!!!!

我们一直在用AFNetWorking去请求数据,我们真正去看过他的请求过程和注意事项吗;说说 实际的请求3.0以后是基于NSURLSession的,请求序列化或得数据的任务默认是挂起的,再返回之前我们要开启,缓存策略是怎么配置的,原理是什么的,过程又是什么,比较不同设置请求的时间吗?等等,想清楚之后再去二次封装下httpTool看看效率吧,一起来看看吧!

1、网络请求最终返回的是NSURLSessionDataTask对象,对象里面包括:请求标识id;原始请求链接;当前请求的链接;请求回复的信息(状态,数据类型,时间,和服务器的一些属性)

AFNetWorking请求过程和注意事项_第1张图片
SessionTask包含的对象

2、序列化请求默认是挂起的:需要在请求结束后调用 [dataTask resume]方法;

AFNetWorking请求过程和注意事项_第2张图片
请求第一步

3、我们请求时传的url、参数、请求头等信息,是经过请求序列化整合到request对象的;

AFNetWorking请求过程和注意事项_第3张图片
序列化生成request对象

4、真正的请求是由NSURLSession发起的,传的唯一参数就是序列化后的request对象;

AFNetWorking请求过程和注意事项_第4张图片
开始真正请求

5、NSURLSession发起请求,是在多线程 同步任务执行的;

AFNetWorking请求过程和注意事项_第5张图片
开始异步请求

6、请求的同时触发进程block实时回调

7、至此请求过程结束,返回数据

几个注意点:

1、设置超时时间:这个时间要根据自己公司服务器的相应时间来时,一般设置为10s左右,,一般一个接口的请求时间不超过0.2s。

2、设置缓存策略:(常用的是默认策略和离线模式):默认策略,如果NSCachedURLResponse对于请求不存在,则从源端获取,如果对于请求存在他会建立一个连接源端的链接,查看内容是否变化,没有变化则从缓存取,否则将从源端获取。

离线模式:是针对没有网络的情况下,也能够使用户获取原始缓存数据。

设置缓存策略要结合:

/*===============设置网络缓存==============*/

/**

内存缓存->4M设置内存缓存的最大容量(字节为单位,默认为512KB)退出后台失效

磁盘缓存->20M设置硬盘缓存的最大容量(字节为单位,默认为10M)删除应用失效

diskPath如果是nil,会缓存到cached的bundleId目录下

*/

NSURLCache*cathe = [[NSURLCachealloc]initWithMemoryCapacity:4*1024*1024diskCapacity:20*1024*1024diskPath:nil];

[NSURLCachesetSharedURLCache:cathe];

3、设置网络请求并发数:这个是设置底层请求请求并发数,但是进入底层之前还会有一个串行同步步骤

安全性设置:

主要是设置一些域名和证书问题,如果是https的话  在CA开发上买的 就直接配置下就好,根据配置可以拷贝证书到项目中,也可以不用拷贝证书(根据PinningMode);如果是自制的则必须拷贝证书,双向对比。

文件上传方式:

我们可以get上传,也可以post上传,可以直接上传,把资源转成data类型或者是InputStream流上传,,,一般上传之前我们要做适当的压缩、加密等操作。一般情况如果数据不多用data类型上传,数量多的话就选择用InputStream的方式上传。

几个问题:

     1、不设置缓存策略时,一个页面同时并发多个数据请求,在不断地进行刷新,页面反应会有不断的卡顿,,,当并发次数比较多时,响应时间明显加长,0.05~0.1的延时

     2、请求链接如果有汉语是一定要注意utf8Code转码,否则会出现闪退

     3、二次封装AFN时你要想到什么:基础链接,请求头,序列化,超时时间,缓存策略,安全性配置,缓存池配置,请求链接处理等等。

    4、怎么保证请求的顺序性,直接设置httpSessoinM.operationQueue.maxConcurrentOperationCount=1 就好的,只能并发一个。

你可能感兴趣的:(AFNetWorking请求过程和注意事项)