博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习笔记之Reachability简单使用
阅读量:5077 次
发布时间:2019-06-12

本文共 2162 字,大约阅读时间需要 7 分钟。

写在前面

在学习异步图片下载的Demo过程中,由于需要实时检测网路状态,因此用到了苹果提供的Reachability库。Reachability的功能包括:检测目标网络是否可用、检测当前网络的链接方式(2G、3G、Wifi)、检测网络连接的变更。

使用准备

看网上说Reachability有两个版本,一个是苹果官方的,一个是Andrew W. Donoho 改进过后的,我主要使用的还是官方的版本,下载地址如下:

https://developer.apple.com/library/ios/samplecode/Reachability/Listings/Reachability_main_m.html
下载完后在自己的项目中导入Reachability.h/m,然后就可用开始使用了。

使用简介

1、在控制器中注册网络状态改变的通知

- (void)viewDidLoad{    [super viewDidLoad];        //监测网络情况    [[NSNotificationCenter defaultCenter] addObserver:self                                             selector:@selector(reachabilityChanged:)                                                 name: kReachabilityChangedNotification                                               object: nil];     //初始化Reachability类,并添加一个监测的网址。    Reachability *hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"];    //开始监测    [hostReach startNotifier];}

2、在控制器中编写接收到通知后的处理事件

- (void)reachabilityChanged:(NSNotification *)note {    Reachability* curReach = [note object];    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);    NetworkStatus status = [curReach currentReachabilityStatus];        //判断网络状体,无网络弹窗提示    if (status == NotReachable)    {        [SVProgressHUD showWithStatus:@"无网络"];    }    //有网络进入界面初始化    else    {        NSLog(@"有网络");        [SVProgressHUD dismiss];        [self initSubviews];    }}

3、在控制器中移除通知观察者

- (void)dealloc{    [[NSNotificationCenter defaultCenter] removeObserver:self];}

写在后面

以上几个步骤就是Reachability的整个使用流程。需要注意的是,Reachability这个库的通知事件有时会被触发两次。比如在联网状态下进入应用,“有网络”这句log可能会打印两次,并且这种情况发生的频率挺高的。通过查找资料(主要是在stack overflow上)和多次测试,证实了这个事实。为了避免initSubviews方法被执行多次,可以考虑加入一个通知计数器,当计数器为1时才执行初始化流程,部分代码如下:

声明通知计数器并初始化

static int countNoti = 0;

通知处理事件

//判断网络状体,无网络弹窗提示    if (status == NotReachable)    {        [SVProgressHUD showWithStatus:@"无网络"];    }    //有网络进入界面初始化    else    {          countNoti++;          [SVProgressHUD dismiss];            //防止通知事件处理多次          if (countNoti == 1)          {              NSLog(@"有网络");              [SVProgressHUD dismiss];              [self initSubviews];          }     }

转载于:https://www.cnblogs.com/scut-linmaojiang/p/iOS-Reachability.html

你可能感兴趣的文章
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>