概述

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

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

  • 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;

最新文章

  1. 配置nginx+php
  2. 隐藏原生html5 video controls
  3. Loadrunner脚本录制常见问题整理
  4. java获得当前文件路径
  5. Ubuntu设置目录的读写权限(Linux命令chmod 777 dirName)
  6. storm spout的速度抑制问题
  7. 关于KeilC51的指针(参见, page 106-113, keil uv2 user's guide 09,2001)
  8. 測试之路3——对照XML文件2
  9. K2 BPM项目 基于COM组件调用SAP RFC 问题
  10. date格式化
  11. stylus选中hover元素的兄弟元素下的子元素
  12. vue-devtools(vue 2.0)手动安装与使用 ? 如何处理Vue.js is detected on this page ?
  13. .NET Core 使用NLog日志记录
  14. img标签里的value获取
  15. 02_计算机网络的OSI七层(应表会传网数物)
  16. rpc概念及nfs的基本应用
  17. Python系列之环境安装
  18. php 请求另一个服务器接口返回数据
  19. 无旋转Treap简介
  20. Vue路由获取路由参数

热门文章

  1. Java中的线程Thread方法之---stop()
  2. 后缀自动机求LCS——spoj-LCS
  3. Python 空值和非空值
  4. NX二次开发-UFUN工程图表格注释获取某一行的tag函数UF_TABNOT_ask_nth_row
  5. NX二次开发-清除信息窗口中的内容,退出信息窗口UF_UI_exit_listing_window
  6. NX二次开发-对话框加锁UF_UI_lock_ug_access
  7. vijos1710 Mrw的工资计划
  8. 拾遗:Perl 正则表达式
  9. IK 用java 代码实现分词
  10. jmeter 实战