IOS AFNetworkReachabilityManager
说明 :
- AFNetworkReachabilityManager,这个类监控当前网络的可达性,提供回调block和notificaiton,在可达性变化时调用
文章中尽量不使用或少使用封装, 目的是让大家清楚为了实现功能所需要的官方核心API是哪些(如果使用封装, 会在封装外面加以注释)
AFNetworkReachabilityManager使用方法
核心API
class : AFNetworkReachabilityManager
delegate : 无
涉及的API : (API的官方详细注释(英文)详见本章结尾)
/** 1. 初始化指定的可达性管理器的实例。 */
+ (instancetype)sharedManager
/** 2. 网络改变时,执行block块内的代码 */
- (void)setReachabilityStatusChangeBlock:(nullable void ( ^ ) ( AFNetworkReachabilityStatus status ))block
功能实现
思路
导入AFNetworking工程文件.
引入AFNetworkReachabilityManager.h头文件.
设置延时调用
初始化单例并同时开启监听
实现网络监听方法, 返回当前网络的通知
(1). 导入AFNetworking工程文件
/** 本文使用的AFNetworking版本为AFNetworking_v2.5.1. */
(2). 引入AFNetworkReachabilityManager.h头文件
#import "AFNetworkReachabilityManager.h"
(3). 设置延时调用
/**
* 由于检测网络有一定的延迟, 所以在启动APP的时候如果不设置网络的延迟, 直接调用[AFNetworkReachabilityManager sharedManager].networkReachabilityStatus有可能得到的是status 返回的值是 AFNetworkReachabilityStatusUnknown;
这个时候虽然有网, 但是也会因为网络的延迟, 直接做出错误的判断.
一般建议设置延时调用 */
/** 给大家简单举个例子(surveyNetworkConcatenate:是自己写的方法) */
/** 0.35秒后再执行surveyNetworkConcatenate:方法. */
[self performSelector:@selector(surveyNetworkConcatenate:) withObject:nil afterDelay:0.35f];
(4). 实现网络监听方法, 返回当前网络的通知
/* 函数调用返回的枚举值 */
/**
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,
*/
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:{
NSLog(@"无网络");
break;
}
case AFNetworkReachabilityStatusReachableViaWiFi:{
NSLog(@"WiFi网络");
break;
}
case AFNetworkReachabilityStatusReachableViaWWAN:{
NSLog(@"无线网络");
break;
}
default:
break;
}
}];
(5). 开启监听,即开始监视网络连接情况
/** 1. 开启监听 */
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
API 官方注释(英文)
/**
* @discussion Returns the shared network reachability manager.
*
*/
+ (instancetype)sharedManager;
/**
* @discussion Starts monitoring for changes in network reachability status.
*/
- (void)startMonitoring;
/**
* @Discussion Sets a callback to be executed when the network availability of the `baseURL` host changes.
* @param <block> A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`.
*/
- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block;