前言
iOS 常用的用于监听网络变化的有两个库Reachability
和RealReachability
Reachability的用法
原作者说的用原来的类名会导致应用上架不通过,解决方法是修改类名。
所以这里修改为ZJReachability
监听网络状态(Notification形式)
1 | var reach:ZJReachability?; |
监听网络状态(Block形式)
1 | var reach:ZJReachability?; |
判断网络状态
1 | self.reach = ZJReachability.forInternetConnection() |
注意点
生成对象实例的时候 可以按下面的方式写,但是这样会导致回调方法会执行两次 所以
- 监听网络变化状态时不能自定义域名
- 判断网络状态的时候才自定义域名
1 | self.reach = ZJReachability.init(hostName: "www.baidu.com") |
另外上面监听变化的事件,在初始化后是不会自动调用,之后网络状态变化才会调用
RealReachability的用法
监听网络状态(Notification形式)
1 | var reach2:RealReachability?; |
监听网络状态(Block形式)
它的Block形式 我在测试时返回的状态不正确 老是显示网络不可用
就不推荐使用了
判断网络状态
因为这个组件的原理是ping
服务器。所以当我们初始化对象后就直接获取状态的话,是无法获取的,得到的结果一定是网络不可用
,因此我们必须延迟点时间再获取,下面的代码就是延迟了2s
,正好在这2s
内用来显示启动页
1 | //初始化 |
对比
两种方式各有利弊
Reachability
效率高 但是如果连着Wifi
却没有网的状况无法判断RealReachability
效率低 能判断连着Wifi
却没有网的状况
但是我还是选择Reachability
因为
- 使用的人多
RealReachability
在网络经常丢包的情况下经常判断有误