AFNetworking 3.0

AFN 3.0学习总结(九)

2018-01-14  本文已影响11人  油麦菜洋葱头

参考:AFNetworking 3.0 源码解读(九)之 AFNetworkActivityIndicatorManager

说明:很多内容都是摘抄原文,只是根据自己的需要进行摘抄或者总结,如有不妥请及时指出,谢谢。

AFNetworkActivityIndicatorManager 是对状态栏中网络激活那个小控件的管理。在平时的开发中,我们很可能忽略了它的存在。然而,实现对它的管理,让我们的APP更符合人机交互,不也是件大快人心的事儿吗。看下边这张图片就明白了:

image
// 这个宏的意思指下边的类不能被扩展
NS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.")

AFNetworkActivityManagerState

激活的四种状态

typedef NS_ENUM(NSInteger, AFNetworkActivityManagerState) {
AFNetworkActivityManagerStateNotActive,   // 未激活
AFNetworkActivityManagerStateDelayingStart,  //激活前的延时阶段
AFNetworkActivityManagerStateActive,    // 激活
AFNetworkActivityManagerStateDelayingEnd  // 取消阶段
};

锁的补充

synchronized是一种锁,这种锁不管是在oc中还是java中用的都挺多的,而且这种锁锁得是对象。具体原理,可以看这篇文章后边的 参考 那一部分。
总结一下,锁一般用于多线程环境下对数据的操作中。在 AFNetworking 中我们见到了3种不同的锁,分别是:
1、NSLock

image

2、dispatch_semaphore_wait

image

3、@synchronized

  1. image

总结

说一下整个流程吧:

1、当收到 AFNetworking 的AFNetworkingTaskDidResumeNotification通知后,调用incrementActivityCount方法。
2、在incrementActivityCount方法中把激活数+1,然后调用updateCurrentStateForNetworkActivityChange方法更新当前的状态。
3、在updateCurrentStateForNetworkActivityChange方法中会设置当前的状态,也就是调用setCurrentState:方法。
4、在setCurrentState:方法中通过当前的状态,来开启或者关闭定时器,然后调用setNetworkActivityIndicatorVisible:方法。
5、在setNetworkActivityIndicatorVisible:方法中设置激活状态。

上一篇 下一篇

猜你喜欢

热点阅读