免费开源的iOS开发学习平台

iOS开发之网络编程:8-网络状态监测之Reachability的使用

Reachability简介

在iOS的开发过程中,应用程序有时需要判断设备当前的网络状态,并由此来控制某些消耗网络流量较多的功能(如无图模式、仅WiFi下播放视频等)。借助Reachability可以用来监测网络环境。Reachability是一个在iOS系统环境下检测iOS设备当前的网络环境的库。它的主要功能是监测三种网络环境:2G/3G/4G、WiFi网络、无网络。在应用的运行状态下,实时监测网络连接方式的变更,及时给出通知。
Reachability这个类在官方SDK中并没有添加,但是在苹果开发者中心我们可以下载到其示例代码,可以从示例代码中,把Reachability.h/.m添加到我们的工程中。

苹果开发者中心提供的Reachability示例代码下载地址:https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html.

Reachability的使用

从苹果开发者中心下载的Reachability示例代码中,将Reachability.h/.m文件添加到工程当中,在使用的类中引入头文件即可。

#import "Reachability.h"

在Reachability类中提供了一个名称为kReachabilityChangedNotification类型的通知,我们需要首先在通知中心注册该通知。然后调用startNotifier方法,启动监测。

- (void)viewDidLoad {
    [super viewDidLoad];
    //注册通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange:) name:kReachabilityChangedNotification object:nil];
    //启动监测
    Reachability *reach  = [Reachability reachabilityWithHostName:@"www.99ios.com"];
    [reach startNotifier];
}

实现networkStateChange:方法,在通知携带的对象中,可以获取当前网络环境信息。

- (void)networkStateChange:(NSNotification *) notification{    
    Reachability *reach = (Reachability *)[notification object];    
    NetworkStatus status = [reach currentReachabilityStatus];
        switch (status) {
        case ReachableViaWWAN:{
            NSLog(@"正在使用3G/4G网络");
            break;
        }
        case ReachableViaWiFi:{
            NSLog(@"正在使用WIFI");
            break;
        }
        case NotReachable:{
            NSLog(@"未知或无网络");
            break;
        }
        default:
            break;
    }
}

示例代码

https://github.com/99ios/12.8