iOS APP 开发 OC 第十三天,测试网路状态 iOS Reachability

iOS APP 开发 OC 第十三天,测试网路状态 iOS Reachability

tags: OC 30 day


今天在看接手的OC专案时,看到一个测试网路状态的方法 Reachability(OC),因为我刚嘅使接触OC,在这之前我在开发swift时,都是利用NWPathMoniitor来测试网路状态:

NWPathMoniitor(swift)

Network framework 是在iOS 12 新推出的 framework。其中的 NWPathMonitor 将可帮我们更简单地侦测网路连线的状态。可以看看彼得潘的文章。

但是这次看专案是利用Reachability,为了看懂程序码,让我们来了解什麽是Reachability。
在这之前,可以看一下stackoverflow

什麽是Reachability?

Reachability是网络助手实用程序类,它用於获取有关连接状态的各种信息。

Reachability的主要目的是什麽?

Reachability用於查询网络状态,并监听在连接状态更改时的通知。

仅使用一个实例,然後监听网络变化,这个方法是否很常见?

这个做法很常见。 在我的项目中,我只有1个下载管理器类的实例,而该类只有Reachability的唯一活动实例。

还是应该在每次网络请求之前检查自己的Reachabilit状态?

通常要做的是在下载管理器中建立一个方法,该方法告诉我是否存在连接。

对Reachability有大致上的理解後,我们来尝试实做看看。

首先,到Reachability介绍页

Reachability示例应用程序演示了如何使用系统配置框架来监视iOS设备的网络状态。 特别是,它演示了如何知道何时可以路由IP,以及何时将通过EDGE或3G等无线广域网(WWAN)接口路由流量。 注意:Reachability无法告诉您的应用程序是否可以连接到特定主机,只能告诉您可能允许连接的接口可用,以及该接口是否为WWAN。 要了解何时以及如何使用可达性,请阅读“网络概述”。

接着你可以下载官方的范例文件,并直接使用 Reachability.m 与 Reachability.h 的文件。
详细使用方法可以参考Nick’s journey on iOS.写的文章

使用范例

//预留网络监控
- (void)net_control{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    NSString *remoteHostName = @"www.apple.com";
    self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
    [self.hostReachability startNotifier];

}

/*!
 * Called by Reachability whenever status changes.
 */
- (void) reachabilityChanged:(NSNotification *)note
{
    Reachability *reach=[note object];
    if([reach currentReachabilityStatus]==ReachableViaWiFi){
        NSLog(@"正在使用WiFi");
    }else if([reach currentReachabilityStatus]==ReachableViaWWAN){
        NSLog(@"正在使用移动数据");
    }else{
        NSLog(@"当前网络不可用");
    }
}

<<:  敏捷方法或框架-极限编程(XP)提供了最多的程序开发实务

>>:  Day [0] — JS之浸猪笼系列

Day46. 范例:摩斯电码 (解译器模式)

本文同步更新於blog 情境:让我们试着作一个摩斯电码机,它会将一般句子转成摩斯电码的表示 首先...

[Day07]打造专业稽核形象

从上图可知衣装仪态的重要性。 其实,稽核专业的形象,一直是我所追求的目标,即使我在资安顾问的年资已...

Day_21 DNS/DDNS/Port Forwards (二)

昨日DNS/DDNS/Port Forwards (一)中提到固定实体IP的设定,但如果你用的是浮动...

Day04,弄几只API

正文 弄完资料库後,花了一点时间的写了这几只API。 主要的routing分成 API/[Contr...

自主学习Android_APP开发 #纪录1

纪录时间:2022/04/16 【前言】 在现在,每人基本都有属於自己的一只智慧型手机,各式各样的A...