zoukankan      html  css  js  c++  java
  • 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。 

    此处有个键值依赖。

  • 相关阅读:
    归档模式与非归档模式之间的转换
    Cognos 常见错误解决办法
    Informatica 错误信息解决办法汇总
    转摘:解决动态列固定行月季年组合式报表
    数据库名、实例名、全局数据库名、服务名的区别
    转摘:维度与指标混合嵌入(合计)设计
    WinForm使用XML动态加载多语言
    windows中最重要的三个动态链接库及功能
    什么是.Net的异步机制(Invoke,BeginInvoke,EndInvoke) step 2
    深入理解.net服务器控件
  • 原文地址:https://www.cnblogs.com/kaisi/p/8760060.html
Copyright © 2011-2022 走看看