写在前面

在学习异步图片下载的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简单使用的更多相关文章

  1. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  4. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  7. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  8. iOS学习笔记之UITableViewController&UITableView

    iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...

  9. IOS学习笔记02---语言发展概述,计算机语言简介.

    IOS学习笔记02---语言发展概述,计算机语言简介. ------------------------------------------------------------------------ ...

随机推荐

  1. TCP详解——传输控制协议(总述)

    初次熟读TCP,随着TCP的发展路线对他深入了解,真心觉得TCP协议的美妙之处.他比UDP这家伙更加可靠,深得我们信任.通过一个个英文简写,例如CRC.ARQ.RTT.ACK.SACK.DACK等,组 ...

  2. Tony的口胡呼呼(。-ω-)zzz

    三分 给定平面内 \(n <= 2000\) 个节点, 求平面内一点使得到所有点的欧几里得距离和最小 确定 \(y\) 轴时 \(x\) 轴满足单峰函数 \(x\) 轴同理 三分套三分即可 深度 ...

  3. MySQL中的编码问题

    1.查看MySQL数据库的默认编码 (1).使用status命令 mysql> status -------------- mysql Ver 14.14 Distrib 5.5.28, for ...

  4. shell提取文件后缀名,并判断其是否为特定字符串

    如果文件是 .css文件 或 .js文件,则进行处理. file=$1 if [ "${file##*.}"x = "css"x ]||[ "${fi ...

  5. myeclipse 怎么安装与激活

    摘录自:http://blog.csdn.net/u012318074/article/details/71310553 第一步:安装完成后不要运行MyEclipse 第二步:下载对应的破解文件 第三 ...

  6. 9、JPA-映射-双向多对多

    实体类 Category package com.jpa.yingshe; import java.util.HashSet; import java.util.Set; import javax.p ...

  7. gitlab与pycharm结合

    一切都在图中 点开pycharm里的菜单选项 设置git代码仓库的地址 修改了代码之后,如何推送到git服务器上 通过pycharm下载代码仓库 pycharm中如何设置分支 pycharm新建了分支 ...

  8. JS——页面倒计时跳转

    Js几秒后倒计时跳转 <html><head><title>出错啦~~~</title><link href="css/login1.c ...

  9. Hadoop mapreduce执行过程涉及api

    资源的申请,分配过程略过,从开始执行开始. mapper阶段: 首先调用默认的PathFilter进行文件过滤,确定哪些输入文件是需要的哪些是不需要的,然后调用inputFormat的getSplit ...

  10. E - tower HYSBZ - 4657 (网络流割点)

    题目链接:https://cn.vjudge.net/contest/281959#problem/E 题目大意:中文题目 具体思路:首先,有矛盾的时候就是两个导弹的运动轨迹会相交的时候,那么我们可以 ...