YTKNetwork源码

697 阅读1分钟

项目中引用了YTKNetwork。在bugly中有crash上报。

原因非常清晰明确。是多线程野指针问题。 再次分析下我对YTKNetwork源码的理解。文后并附解决办法。

架构

  • YTKNetwork将每一个请求实例化。YTKBaseRequest是所有请求类的基类。YTKRequest是子类。主要做了数据缓存等工作。
  • YTKNetworkAgent是一个单例。负责管理所有请求类。当CustomRequest发送请求之后,会把自己放在YTKNetworkAgent持有的字典中,让其管理自己。(在网络请求结束之后将自己移除)
  • YTKNetworkAgent封装了AFNetworking。由他负责AFNetworking请求发送和回调处理。
类名 职责
YTKBaseReqest baseRequest持有NSURLSessionTask实例,responseData,responseObjet,error等数据。处理回调的block和代理
YTKRequest 负责缓存的处理,请求之前查询缓存。请求之后写入缓存
YTKNetworkConfig 全局的请求配置。例如baseurl 和CDNUrl等
YTKNetworkAgent 发起请求。使用字典存储强引用 正在执行的请求
YTKBatchRequest 批量请求。,有一个请求失败认定本组请求失败
YTKChainRequest 链式请求。当某个请求结束后才发起下一个请求。如有一个请求返回失败,则认定请求链失败

参考资料 knightsj.github.io/2017/07/18/…