iOS学习笔记之Reachability简单使用
写在前面
在学习异步图片下载的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学习笔记之Reachability简单使用的更多相关文章
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- iOS学习笔记之UITableViewController&UITableView
iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...
- IOS学习笔记02---语言发展概述,计算机语言简介.
IOS学习笔记02---语言发展概述,计算机语言简介. ------------------------------------------------------------------------ ...
随机推荐
- python爬虫爬取页面源码在本页面展示
python爬虫在爬取网页内容时,需要将内容连同内容格式一同爬取过来,然后在自己的web页面中显示,自己的web页面为django框架 首先定义一个变量html,变量值为一段HTML代码 >&g ...
- JavaScript中对象分类
js的对象有三大类,内部对象(本地对象和内置对象).宿主对象和自定义对象 一.内部对象 1.本地对象,ECMAScript提供的需要实例化(new)才能使用的对象: Object.Function.A ...
- 【Python】统计个人新浪微博词频并给出相应的柱状图
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Java POI 读取word文件
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要 ...
- 为什么推荐InnoDB引擎使用自增主键?
索引使用时遇到的问题(顺丰)--InnoDB引擎不使用自增主键导致性能问题,也可答最左前缀 InnoDB自增主键 InnoDB主索引(同时也是数据文件)的示意图: 上文讨论过InnoDB的索引实现,I ...
- Centos7系统初始化脚本
前言: 因公司业务增加,陆续新增服务器,时不时的来几台,手动地一台台对服务器初始化操作感觉太麻烦. 于是乎,根据初始化需求整合了一个初始化脚本,实现批量脚本初始化操作. 说明: 本脚本根据自身需求编写 ...
- TCP/IP详解 卷1 第一章概述
第一章概述 1.2 分层 网络编程通常分不同层次进行开发,每一层负责不同的通信功能. 一个协议族比如TCP/IP,通常是一组不同层次上多个协议的组合.一般可以认为是是四层协议系统: 链路层:有时也称作 ...
- (原创 开源)AppWidge的使用—桌面便利贴
Android平台的一大特色就是支持桌面插件——AppWidget. 且不说,AppWidget是否会影响系统的流畅性,AppWidget确实是满足了用户个性化和快捷操作的需要. 常见的AppWidg ...
- jira7.3.6添加导出excel的按钮
在 jira的application-data 文件夹下 jira-config.properties 文件(如果没有就创建一个) 中添加以下内容:jira.export.excel.enabled= ...
- AD域相关的属性和C#操作AD域
“常规”标签 姓 Sn 名 Givename 英文缩写 Initials 显示名称 displayName 描述 Description 办公室 physicalDeliveryOfficeNam ...