AFNetworking框架实现原理

来源:互联网 发布:微信打开淘宝链接 原理 编辑:程序博客网 时间:2024/05/20 01:39

AFN框架的横空出现是我等程序员请求数据时的一个大招,现在就紧跟我的脚步咱们简要看看其内部原理,先上图,我们再说话:
这里写图片描述
AFN封装了NSURLConnection和NSURLSession的功能,只需一行代码我们就可以轻松愉快的请求数据了还有两个辅助功能就是:安全策略(HTTPS)和网络连接状态(Reachability):
这里写图片描述

我感觉最好的就是Json数据的序列话和反序列话,但是对于XML数据的解析就有点扯淡了!现在我们重点说说这部分:
AFN请求和相应的数据格式已经默认设置好了:
设置请求的数据格式:self.requestSerializer = [AFHTTPRequestSerializer serializer]; // 二进制
设置相应的数据格式:self.responseSerializer = [AFJSONResponseSerializer serializer]; // 默认是JSON
AFN可供选择的请求格式有:
AFHTTPRequestSerializer 二进制的(默认的)
AFJSONRequestSerializer JSON
AFPropertyListRequestSerializer PList
AFN可供选择的 响应的格式:
AFHTTPResponseSerializer 二进制的
AFJSONResponseSerializer JSON(默认的)
AFXMLParserResponseSerializer XMLParser
AFXMLDocumentResponseSerializer XML DOM(仅 MAC 可用)
AFPropertyListResponseSerializer PList
AFImageResponseSerializer 图像
AFCompoundResponseSerializer 组合
对于常规的网络请求数据格式如下(不做任何修改)
-发送数据的格式,就是二进制的
-接收的数据格式,JSON是最流行的数据格式,没有之一!
最坑的就是AFN对于返回数据是XML类型的,顿时傻逼了!!这可怎么办?唯一的办法只有我们自己手动解析了!解析XML文件有两种方式:SAX解析 和 DOM解析,如果我们想要SAX解析的话就设置:manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; 如果我们要DOM解析的话就设置:manager.responseSerializer = [AFHTTPResponseSerializer serializer];但是DOM解析的话只实用于小文件。
如果我们要请求 Image图像数据的话最好实用 SDWebImage框架,因为它的缓存机制是碉堡的。

综上所述:AFN框架的主要作用就是进行数据的传输和简单的数据解析,在这里我们不需要考虑HTTP和线程间的通讯问题,因为返回来的数据就在主线程内。

0 0
原创粉丝点击