iOS开发经验

CTNetworking 源码分析

2017-05-09  本文已影响355人  iOS_愛OS

原始粗狂版本

CTNetworking 源码分析

从最外部的业务层开始,一步一步的向底层分析
demo 中FireSingleAPI 类作为业务层网络请求的入口

//进行网络请求的类

//设置网络请求参数的代理

pragma mark - CTAPIManagerParamSource

//网络请求结果代理

pragma mark - CTAPIManagerCallBackDelegate

//请求成功

//请求失败

以上就是业务层关于CTNetworking 网络框架的用法。
使用 TestAPIManager 进行网络请求, 设置请求参数, 获取请求结果

TestAPIManager 类
这里详细看一下 TestAPIManager 是如何进行网络请求, 设置请求参数 处理请求结果的
从loadData 开始

查看loadDataWithParams 方法

这个方法,详细处理了网络请求的具体操作

  1. 网络请求是否会被拦截,这里出现了网络拦截器 的类 CTAPIManagerInterceptor
    使用网络拦截器来 判断网络请求参数是否合法,合法则继续网络请求,非法则拦截网络请求
  2. 查看是否有缓存,如果有缓存 则不进行网络请求直接 取本地缓存的数据
  3. 没有本地缓存则从服务器请求数据

我们先从服务器请求数据开始,加载本地缓存 后面再分析
当网络请求成功之后,会调用方法:successedOnCallingAPI
主要处理事项:

  1. 验证网络数据是否合法
  2. 将网络数据缓存到本地 用CTCachedObject 类去缓存数据
  3. 响应成功 通知代理(业务层)去将网络数据更新到UI
  4. 响应的数据出错 通知代理(业务层) 让UI做失败处理

上面的方法是响应数据成功后的处理
现在分享响应数据失败之后的处理
方法:failedOnCallingAPI
主要处理事项:
根据不同的错误类型 做不同的处理
1.token 过期
2.token 无效
3.无权限
4.其他错误
方法如下:
//针对不同响应数据失败类型 分别处理

CTAPIBaseManager 类就分析到这

比较两个方法是否相等:
如果遇到两个同名的方法,怎么样才能判断他们是同一个方法呢?
如下:
IMP childIMP = [self.child methodForSelector:@selector(reformParams:)];//代理方法
IMP selfIMP = [self methodForSelector:@selector(reformParams:)];//自身方法

if (childIMP == selfIMP) {//判断是否是同一个方法
    return params;
}

如何处理缓存。
创建缓存对象CTCachedObject ,对象的属性有 缓存内容,缓存是否为空,缓存是否过期,缓存跟新时间
方法有:带有缓存内容的初始化方法, 更新缓存内容的方法

缓存的保存,获取,删除等操作, 把这些操作抽象成一个对象 CTCache 。
考虑到 缓存到处都在使用,把他设为单类。
他有一个 NSCache 对象,可以对 缓存对象CTCachedObject进行增删改的操作。

上一篇下一篇

猜你喜欢

热点阅读