iOS学习笔记之Reachability简单使用
2016-08-09 11:29
316 查看
写在前面
在学习异步图片下载的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]; } }
相关文章推荐
- iOS学习笔记—— UISegmentedControl 控件的简单使用
- iOS学习笔记---UIPageControl的简单使用(用于分页)
- iOS学习笔记—— UItableView 控件的简单使用
- iOS学习笔记-----block function简单使用
- iOS学习笔记—— UIPickerView 控件的简单使用
- iOS学习笔记6- iOS UICollectionView简单使用
- APIDemo学习笔记——Android上几种简单的Animation使用方法(二)
- 学习笔记,VB.NET使用DirectSound9 (1) 简单播放
- IOS学习笔记33—XML解析之KissXML的使用
- IOS学习笔记3—Objective C—简单的内存管理
- IOS学习笔记之实现一个简单的表
- Flex权威指南3学习笔记之二------简单控件的使用
- iOS学习之Table View的简单使用
- ios学习笔记(六)使用UIScrollView嵌套UIView子类
- APIDemo学习笔记——Android上几种简单的Animation使用方法(三)——3D Transition
- ios学习笔记(六)使用UIScrollView嵌套UIView子类
- entlib5.0 学习笔记 caching application block2 简单使用示例
- 【Android】学习笔记(9)——SQLite简单使用
- iOS开发学习笔记:使用xcode里的单元测试,放在STAssert…里面的语句无法使用自动完成功能
- IOS学习笔记27—使用GDataXML解析XML文档