概述

在网络应用中,需要对用户设别的网络状态进行实时监控,可以让用户了解自己的网络状态出现网络问题提示用户。

一般在网络状态不好的场景下需要做一些处理比如:

  • 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开发系列-网络状态监控的更多相关文章

  1. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  2. iOS开发 - 检测网络状态(WIFI、2G/3G/4G)

    本文转载至 http://blog.csdn.net/wangzi11322/article/details/45580917 检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 ...

  3. iOS开发-关于网络状态的判断

    在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...

  4. iOS开发系列-线程状态

    概述 线程从创建到销毁中间存在很多种状态. 线程的状态 通过NSThread创建一条线程,开发者需要负责线程的创建和执行,线程的销毁由系统决定.创建一个继承NSThread的FMThread类,重写d ...

  5. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  6. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  7. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  8. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  9. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

随机推荐

  1. PHP PDO 事务与自动提交

    现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的. 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isola ...

  2. Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  每次把\(n\ ...

  3. sql 生成javabean实体

    select a.name,c.name,b.name,'private String '+lower(c.name)+';' from sysobjects a, systypes b, sysco ...

  4. 快速排序--Python实现

    快速排序算法:1.选择一个基准数2.小于基准数的放左边,大于基准数的放右边3.利用递归的方法针对左边的数据进行快速排序,再对右边的数据进行快速排序4.递归停止的条件:数组为空或者只有一个元素 时间复杂 ...

  5. 在vs2010下编译boost

    1. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe; 2. 在vs2010下编译boost boost最新版本已经支持vs2010,然而直接下载编译会发现一堆bug: 首先 ...

  6. 协方差及matlib绘制

    转自http://www.cnblogs.com/chaosimple/p/3182157.html 一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个 ...

  7. sklearn数据集划分

    sklearn数据集划分方法有如下方法: KFold,GroupKFold,StratifiedKFold,LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,L ...

  8. Activiti学习笔记11 — 判断节点的使用

    一. 创建流程 <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns=" ...

  9. mysql 数据库基本命令

    停止mysql服务:net stop mysql      //管理员方式运行 启动mysql服务:net start mysql 进入数据库:mysql -u root -p 查看数据库:show ...

  10. 0924CSP-S模拟测试赛后总结

    50分-rank28 我是第二机房垫底大垃圾. 赛时T1和T2其实想到了正解??安慰自己罢了. 真正的CSP-S的赛后你还能和主办方争论说自己其实想到了正解要求人家硬给你个省一不成?? 出题人不知道到 ...