• AFNetworking 3.0源码阅读


    AFNetworkReachabilityManager是AFNetWorking库中用于监控网络环境变化的类。

    首先从AFNetworkReachabilityManager.h文件一层一层往下看。

    其实现是依赖于SystemConfiguration这个api。

    这是一个用以描述网络状态的枚举封装。在枚举下方以及.h文件的最底端可以看到两个宏NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END,这两个宏是苹果为了减轻开发者工作量专门提供的两个宏,在这两个宏之间的代码中的简单指针对象均被定义为nonnull,也就是对象不可以为null。一般用于OC向转时区分对象到底是什么类型,另外一个是nullable代指对象可以为null或者nil。

    Swift 中的 nil 和Objective-C 中的 nil 不同,在 Objective-C 中 nil 是一个指向不存在对象的指针。在 Swift中,nil 不是指针,他是值缺失的一种特殊类型,任何类型的可选项都可以设置成 nil 而不仅仅是对象类型。Swift编程语言

    接下来看下.h文件中暴露出的属性。 

    定义了四个只读属性:

    1.网络状态

    2.网络是否可达

    3.是否为WWAN

    4.是否为WiFi

    注意:BOOL属性的getter方法要写。 

    提供了5个初始化方法,其中SCNetworkReachabilityRef是该类实现的基础。

    打开和关闭监听的方法。 

    可以通过该方法返回的字符串来提示用户,也可以自定义提示文字

    当网络状态变化时的回调,以block方式实现。 

     

    该方法返回一个AFNetworkReachabilityStatus状态的本地化字符串,通过FOUNDATION_EXPORT定义可以进行==比较以及可以在该文件中隐藏实现细节

    接着开始看AFNetworkReachabilityManager.m。

     引入的系统库头文件。

    一些定义和初始化。

    根据传入的网络状态返回响应的开发中的本地化字符串。

    该方法是先通过flags调用上一张图片中的方法获取本地化的字符串之后使用通知或者block传递出去。放在同一个方法是为了保证block和通知传出数据一致,使用异步串行队列是为了保证监听顺序正确。比如说当前为蜂窝然后我将蜂窝的状态作为通知的info发送出去,此时改成wifi那么就会有一次发送一个wifi状态info的通知,且薄两次接收的顺序依次为先蜂窝再wifi。

    回调时调用发送状态改变的那个方法。

    这两个方法其实是作为之后SCNetworkReachabilityContext结构体的参数。

    类中的属性

    注意单例写法

    调用顺序sharedManager ==> manager ==> managerForAddress:(const void *)address

    此处有一个CFRetain操作

    销毁时停止监听同时CFrelease操作 

    核心方法,设置网络监听。SCNetWorkReachability相关使用参考官方demo https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

    步骤:创建conetext,设置回调,加入runloop。 

    此处有个键值依赖。

  • 相关阅读:
    ios15--综合小例子
    ios ionic 装平台 笔记
    ios14--购物车优化2
    ios13--购物车优化
    ios--plist
    ios12--简易购物车
    ios11--UIButton
    Android Json的使用(2) 使用Jackson解析和生成json
    快速Android开发系列网络篇之Retrofit
    关于XUtils框架细解
  • 原文地址:https://www.cnblogs.com/kaisi/p/8760060.html
Copyright © 2020-2023  润新知