iOS开发实践之网络检測Reachability
在网络应用开发中。有时须要对用户设备的网络状态进行实时监控。以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等)。用Reachability实现网络的检測。
苹果官方提供了Reachability的演示样例程序,便于开发人员检測网络状态
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
1、 网络状态枚举NetworkStatus:
NotReachable = 0, //没有网络
ReachableViaWiFi, //Wi-Fi网络
ReachableViaWWAN //移动网络(非Wi-Fi)
2、Reachability经常用法:
/*!
* 通过host实例化Reachability
*/
+ (instancetype)reachabilityWithHostName:(NSString *)hostName; /*!
* 通过ip地址实例化Reachability
*/
+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress; /*!
* 获取网络连接对象
*/
+ (instancetype)reachabilityForInternetConnection; /*!
* 获取Wi-Fi链接对象
*/
+ (instancetype)reachabilityForLocalWiFi; /*!
* 监听网络变化方法
*/
- (BOOL)startNotifier; //開始监听
- (void)stopNotifier; //停止监听 //当前网络连接状态
- (NetworkStatus)currentReachabilityStatus;
3、监听网络变化:kReachabilityChangedNotification
3.1、注冊网络状态通知
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(netWorkStatusChange)name:kReachabilityChangedNotificationobject:nil];
3.2、 获取Reachability对象
self.reachability = [Reachability
reachabilityForInternetConnection];
3.3、開始监听网络变化
[self.reachability
startNotifier];
3.4、关闭通知并释放对象
-(void)dealloc{
[self.reachabilitystopNotifier];
[[NSNotificationCenter
defaultCenter]removeObserver:self];
}
4、Reachability的使用步骤
4.1、加入框架SystemConfiguration.framework(xocde5之后自己主动加入)
4.2、引入源码
4.3、导入头文件
#import "Reachability.h"
4.4、假设Reachability执行报arc错误。
则源代码设置arc编译环境(眼下最新下载Reachability是arc模式)。
假设你的项目使用的非 ARC 模式。则为 ARC 模式的代码文件增加 -fobjc-arc 标签。
假设你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件增加 -fno-objc-arc 标签。
5、栗子:
NetWorkTool.m
#import "NetWorkTool.h"
#import "Reachability.h" @implementation NetWorkTool //检查是否Wi-Fi网络
+(BOOL)isEnableWIFI{
return [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable;
} //检查是否移动网络
+(BOOL)isEnableWWAN{
//return [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable;
return [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == ReachableViaWWAN;
} @end
ViewController.m
#import "ViewController.h"
#import "Reachability.h"
#import "NetWorkTool.h" @interface ViewController ()
@property(nonatomic,strong) Reachability *reachability; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; //注冊网络状态通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(netWorkStatusChange) name:kReachabilityChangedNotification object:nil]; //获取Reachability对象
self.reachability = [Reachability reachabilityForInternetConnection]; //開始监听网络变化
[self.reachability startNotifier];
} //关闭通知并释放对象
-(void)dealloc{
[self.reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
} //网络变化
-(void)netWorkStatusChange{
NSLog(@"当前网络发生改变");
[self checkCurNetWork];
} //检測网络
-(void) checkCurNetWork{
if ([NetWorkTool isEnableWIFI]) {
NSLog(@"当前网络为Wi-Fi网络");
}else if ([NetWorkTool isEnableWWAN]){
NSLog(@"当前网络为移动网络");
}else{
NSLog(@"没网络连接");
}
}
iOS开发实践之网络检測Reachability的更多相关文章
- iOS 开发实践之 Auto Layout
原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...
- iOS开发实践-OOM治理
概览 说起iOS的OOM问题大家第一想到的应该更多的是内存泄漏(Memory Leak),因为无论是从早期的MRC还是2011年Apple推出的ARC内存泄漏问题一直是iOS开发者比较重视的问题,比如 ...
- ios开发——实用技术篇&网络音频播放
网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架 ...
- iOS开发——post异步网络请求封装
IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异 ...
- iOS开发-基本的网络知识
一.HTTP协议的主要特点:(摘自 仰望星空 的博客)重点内容 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由C ...
- iOS开发实践:一个类微博客户端从启动到与用户交互的过程
本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序 ...
- ios MVVM实践 刷新网络请求+tableView展示数据
[实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...
- iOS开发实践之GET和POST请求
GET和POST请求是HTTP请求方式中最最为常见的. 在说请求方式之前先熟悉HTTP的通信过程: 请求 1.请求行 : 请求方法.请求路径.HTTP协议的版本号 GET /MJServer/reso ...
- ios开发实践之UIDatePicker(已对之前无法解决的问题做了解答)
需求:要做一个生日选择的控件,但除了选择之外还需要自定义几个控件,跟生日选择控件组合一起. 做法:自定义了一个UIImageView,并且作为背景.在这个背景view上再添加其他button和时间选择 ...
随机推荐
- oc2---类
// main.m // 第一个OC类,OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体,创建一个对象就是创建一个结构体指针, #import <Foundation/ ...
- adbd cannot run as root in production builds的解决方法
部分手机root后,使用adb root会出现这个提示. 原因是root不彻底. adb shell之后进入到$界面,su一下才进入到#. 这个之后可以使用root功能了. 注意到,这个时候exit的 ...
- 在android中读写文件
在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...
- javascript必须知道的知识要点(一)
该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 语句 注释 输出 字面量 变量 数据类型 typeof ...
- [Pulgin] 利用swfupload实现java文件批量上传
URL:http://blog.csdn.net/xuweilinjijis/article/details/8876305 之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传 ...
- NOIP2012 D2 T2 借教室 线段树 OR 二分法
题目描述: 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- selenium对浏览器属性操作的方法
最大化 方法一 //指明ChromeDriver路径 System.setProperty(Src_url_string.Chrome_Driver, Src_url_string.Driver_ad ...
- 多个tomcat配置,解决冲突问题
一.一般修改 路径: /opt/apache-tomcat/conf/server.xml 1.第一个tomcat使用默认配置 2.第二个tomcat一般配置 二.特殊修改 1.第二个tomcat特殊 ...
- Python 之 风格规范(Google )
开头先mark一下网址:goole官网 任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步. 一.分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 二.行长度 每行不超过80个 ...
- cordova 打包工具
一.环境安装 1.安装NodeJs https://nodejs.org 直接去官网下载并按默认路径安装就可以了. 安装完成后在命令行: (测试成功!) $ npm 2.安装Cordova 命令行 ...