网上AFN代码解读和剖析的文章多如牛毛,烦不胜举,但是真正对于一个框架系统全面的认知却是少之又少,这里写一篇关于源码解释及剖析的文章,希望对你有所帮助。
源代码架构
项目结构这里我们只需要知道,Session封装的是网络请求会话,Serialization封装的是请求及响应的序列化,Security封装的是安全策略,Reachability封装的是网络监测工具类。
这个类中基本每一行代码我都添加了注释,方便大家理解。
如下面的代码注释
/**
创建的请求缓存策略,默认是‘NSURLRequestUseProtocolCachePolicy’
@see NSMutableURLRequest -setCachePolicy:
*/
@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy;
/**
创建请求是否使用默认的cookie handing,默认为YES.
如果单个请求想不带cookie可以设置NSMutableURLRequest的HTTPShouldHandleCookies为NO。
@see NSMutableURLRequest -setHTTPShouldHandleCookies:
*/
@property (nonatomic, assign) BOOL HTTPShouldHandleCookies;
/**
在收到来自较早传输的响应之前,创建的请求是否可以继续传输数据。 默认为“NO” 。
通常默认情况下请求和响应是顺序的, 也就是说请求–>得到响应后,再请求.
如果将HTTPShouldUsePipelining设置为YES, 则允许不必等到response, 就可以再次请求. 这个会很大的提高网络请求的效率,但是也可能会出问题.
因为客户端无法正确的匹配请求与响应, 所以这依赖于服务器必须保证,响应的顺序与客户端请求的顺序一致.如果服务器不能保证这一点, 那可能导致响应和请求混乱.
@see NSMutableURLRequest -setHTTPShouldUsePipelining:
*/
@property (nonatomic, assign) BOOL HTTPShouldUsePipelining;
/**
创建请求的网络服务类型。默认为‘NSURLNetworkServiceTypeDefault’
@see NSMutableURLRequest -setNetworkServiceType:
*/
@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType;
项目地址为 AFNCodeRead
希望大家一起进步,共同学习。
网友评论