AFNetworking (3.1.0) 源码解析 <六>】的更多相关文章

今天要介绍的是Reachability文件夹下的AFNetworkReachabilityManager类.通过字面意思我们就可以知道AFNetworkReachabilityManager是用来监测网络状态,网络状态管理的类,他可以通过设置状态改变回调来获得当前网络状态. 下面我们还是先看.h文件. 上边枚举表示的是网络状态,网络状态有以上几种,分别是未知,不可用,无线广域网连接,WiFi连接. 以上是包含的属性 networkReachabilityStatus当前网络的状态,就是枚举中的类…
本篇说说安全相关的AFSecurityPolicy模块,AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程大致是,客户端和服务端建立一个连接,服务端返回一个证书,客户端里存有各个受信任的证书机构根证书,用这些根证书对服务端 返回的证书进行验证,经验证如果证书是可信任的,就生成一个pre-master  secret,用这个证书的公钥加密后发送给服务端,服务端用私钥解密后得到pre-master secr…
这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerialization通过一个解码数据转换成一个更有用的对象表示的对象被遵守,根据服务器响应的细节.响应序列化器可能另外执行在传入的响应和数据上的验证. 比如,一个JSON响应序列器可以检查一个可接受的状态码(“2 xx”范围)和内容类型(application / JSON),解码一个有效的JSON响应成为一…
这次主要开始讲解一下文件夹Serialization下的类AFURLRequestSerialization. AFURLRequestSerialization类遵守`AFURLRequestSerialization`和`AFURLResponseSerialization`协议,提供一个查询字符串/表单编码的参数序列化和默认请求头的具体的基本的实现,以及响应状态代码和内容类型验证.也就是对发出的请求进行一些处理. 处理HTTP的任何请求或响应序列化被鼓励归入“AFHTTPRequestSe…
首先说一下AFNetworking的github地址:GitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS 最近抓时间研究了一下AFNetworking,目前版本是3.1.0,我通过CocoaPods导入的AFNetworking,导入后目录如下 使用CocoaPods导入后可以看到目录很清晰主要是在五个文件夹下,NSURLSession,ReachAbility,Security,Serial…
这次主要看一下文件夹Security中的类AFSecurityPolicy----安全策略类. AFSecurityPolicy主要的作用是验证HTTPS请求证书的有效性,在iOS9之后,默认不能发送HTTP请求,如果想要发送HTTP请求,需要在plist里边设置NSAppTransportSecurity的NSAllowsArbitraryLoads为true,这样就可以支持HTTP请求. 首先还是看一下.h文件 可以看到一个枚举,表示SSL Pinning的模式,如下 `AFSSLPinni…
这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请求方法.当一个baseURL被提供,通过相对路径可以进行'get'/'post'/'put'/'patch'/'delete'五种不同的请求. baseURL用于构建请求,在方法中的相对路径,比如方法requestWithMethod:URLString:parameters:和get,post这些…
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式中的处理器角色,我们通过如下的对象图也许更能反映多个UpdateRequestProcessor类型的处理器的活动行为 UpdateRequestProcessorChain为请求处理器链,供客户端调用(内部依赖处理器工厂数组生成不同的处理器) public final class UpdateRe…
今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的(线程组类似于树结构,一个线程组包含多个子线程组或多个子线程,数据结构类似于composite模式,不过枝节点与叶子节点没有实现类似composite模式的共同接口) 关键类是org.archive.crawler.framework包里面的ToePool类与ToeThread类,前者继承自Thre…
本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本人姑且将之归入桥接模式(Bridge)吧:QParserPlugin插件的行为依赖于QParser的具体类型 QParserPlugin为抽象类,职责为创建QParser类型对象 package org.apache.solr.search; import org.apache.solr.commo…