iOS开发系列-网络状态监控
概述
在网络应用中,需要对用户设别的网络状态进行实时监控,可以让用户了解自己的网络状态出现网络问题提示用户。
一般在网络状态不好的场景下需要做一些处理比如:
- WIFT/3G/4G网络:自动下载高清图。网络不好的场景下载缩略图。
- 没有网络显示离线的缓存数据
网络监控
方案一
苹果官方的Reachability示例程序。
下载地址 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
Reachability获取当前的网络
Reachability *reachability[Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"----------没有网络");
break;
case ReachableViaWWAN:
NSLog(@"----------蜂窝网络");
break;
case ReachableViaWiFi:
NSLog(@"----------连接wifi");
break;
default:
Reachability监听网络
Reachability监听网络是通过通知kReachabilityChangedNotification的方式来通知网络的改变。在监听的过程中需要保证Reachability实例不能释放。
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
// 开始监听
[self.reachability startNotifier];
/*!
* Called by Reachability whenever status changes.
*/
- (void) reachabilityChanged:(NSNotification *)note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
// 自己获取网络
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"----------网络有问题");
break;
case ReachableViaWWAN:
NSLog(@"----------蜂窝网络");
break;
case ReachableViaWiFi:
NSLog(@"----------连接wifi");
break;
default:
break;
}
}
方案二
使用AFNetworking框架中的AFNetworkReachabilityManager。AFNetworkReachabilityManager也是基于苹果的Reachability实现的。
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
// 设置开始监听在设置setReachabilityStatusChangeBlock之前
[manager startMonitoring];
// 设置网络监听
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
/**
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, // 为止网络
AFNetworkReachabilityStatusNotReachable = 0, // 没有联网
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 手机自带网络
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI
};
*/
NSLog(@"--------------%ld", status);
}];
AFNetworkReachabilityManager被AFN框架内部强引用者,不需要外部再次强引用。
另外AFNetworkReachabilityManager提供了一一些获取网络状态的类方法
@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;
@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;
@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;
iOS开发系列-网络状态监控的更多相关文章
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
- iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
本文转载至 http://blog.csdn.net/wangzi11322/article/details/45580917 检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 ...
- iOS开发-关于网络状态的判断
在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...
- iOS开发系列-线程状态
概述 线程从创建到销毁中间存在很多种状态. 线程的状态 通过NSThread创建一条线程,开发者需要负责线程的创建和执行,线程的销毁由系统决定.创建一个继承NSThread的FMThread类,重写d ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
随机推荐
- jQuery.speech实现文本转语音播报功能
先放一个实例的地址https://github.com/wenco/speech jQuery.speech是用jQuery写的扩展插件,主要是用来语音播报. 接口调用百度翻译的接口,所以存在url参 ...
- eclipse打包插件net.sf.fjep.fatjar
eclipse打包插件安装 1)将net.sf.fjep.fatjar_0.0.32.jar拷贝到eclipse安装目录中的plugins目录下,然后重启eclipse即可. 软件获取方式: 链接:h ...
- NX二次开发-UFUN链表UF_MODL_create_list等用法
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_curve.h> #include < ...
- elementui tree 节点过滤加载对应子节点
/官网例子 <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-inpu ...
- C语言中static用法介绍
C语言中static用法介绍 对于新手来说,很多东西的用法还不是很清楚,我们今天一起来看看C语言中static用法介绍 1.声明了static的变量称为静态变量,根据作用域的不同又分为 ...
- BOM DOM 简介
BOM和DOM简介 BOM,Browser Object Model ,浏览器对象模型. BOM主要提供了访问和操作浏览器各组件的方式. 浏览器组件: window(浏览器窗口) locati ...
- QTableWidget学习
一.这次项目需要用到,可以在tablewidget中添加item,并且可以通过鼠标的右键选项进行一些打开.删除等操作. 1.在构造函数中定制右键菜单选项 ui.tableWidget_2->se ...
- spark SQL之Catalog API使用
Catalog API简介 Spark中的DataSet和Dataframe API支持结构化分析.结构化分析的一个重要的方面是管理元数据.这些元数据可能是一些临时元数据(比如临时表).SQLCont ...
- nginx之tcp负载代理
大多数人针对nginx的负载均衡代理都是停留在HTTP代理那一块,我也一样:然而最近遇到了一个小问题,下面简单的叙述一下: 1.开发那边使用java代码进行ssh连接Linux服务器,然后执行bash ...
- 无LoadLibrary获取指定模块基址
实际上,这块可以写成汇编,然后做远程注入用 方法 1.通过fs:[30h]获取当前进程的_PEB结构 2.通过_PEB的Ldr成员获取_PEB_LDR_DATA结构 3.通过_PEB_LDR_DATA ...