在我们的项目中很多时候会对网络进行监听,以便在网络状态改变的时候app可以做出一些事件,这篇文章主要是介绍AFNetworking中的AFNetworkReachabilityManager这个类的属性和方法,以及怎么去使用这个类.
//通过导入了这个头文件,我们得知:网络监控的实现是依赖SystemConfiguration这个api的
#import <SystemConfiguration/SystemConfiguration.h>
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
/**
* 未知网络
*/
AFNetworkReachabilityStatusUnknown = -1,
/**
* 无网络
*/
AFNetworkReachabilityStatusNotReachable = 0,
/**
* wwan手机自带网络
*/
AFNetworkReachabilityStatusReachableViaWWAN = 1,
/**
* wifi
*/
AFNetworkReachabilityStatusReachableViaWiFi = 2,
};
//当前网络的连接状态
@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
// 当前网络是否可达
@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;
//当前网络是否连接wwan
@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;
//当前网络是否连接Wifi
@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;
//以下提供了5种初始化方法,能够满足大部分的需求。
+ (instancetype)sharedManager;
+ (instancetype)manager;
//监听制定domain的网络状态。
+ (instancetype)managerForDomain:(NSString *)domain;
+
// 监听某个socket地址的网络状态,
+ (instancetype)managerForAddress:(const void *)address;
- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;
//开始监听网络的状态
- (void)startMonitoring;
//停止监听网络状态
- (void)stopMonitoring;
// 返回一个网络状态的本地语言的字符串。往往我们可以根据这个字符串来告诉用户,当前网络发生了什么,当然,也可以根据状态自定义提示文字。。
- (NSString *)localizedNetworkReachabilityStatusString;
//设置网络状态改变的回调,
- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;
/*这个是与网络状态变化相关的通知。接受的通知中会有一个userinfo 是一个NSDictionary 其中key就是
AFNetworkingReachabilityNotificationStatusItem
*** 这简单的两行代码能够告诉我们的是,我们平时的开发中 但凡设计到发通知的功能,我们应该把通知的字符串封装到一个专有的文件中,同时在文件内部按不同模块进行区分,当然必要的注释也很有必要。
ps: FOUNDATION_EXPORT 和#define 都能定义常量。FOUNDATION_EXPORT 能够使用==进行判断,效率略高。而且能够隐藏定义细节(就是实现部分不在.中)
*/
FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification;
FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem;
下面看一下网络监听的具体应用,一般是在AppDelegate类中写如下方法
//导入头文件
#import "AFNetworkReachabilityManager.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.初始化
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
//2.开始监听网络的状态
[manager startMonitoring];
//3.设置网络状态改变的回调
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
switch (status) {
case AFNetworkReachabilityStatusUnknown:
alert.message = @"当前是未知网络";
break;
case AFNetworkReachabilityStatusNotReachable:
alert.message = @"无网络连接";
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
alert.message = @"手机蜂窝网络";
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
alert.message = @"当前WiFi网络";
break;
default:
break;
}
[alert show];
}];
return YES;
}
参考文章: AFNetworking 3.0 源码解读
本文聚焦于AFNetworking中的AFNetworkReachabilityManager,解析其属性和方法,指导如何在项目中实现网络状态监听,特别是在AppDelegate中的应用。通过实例代码,展示网络监听的关键步骤。

681

被折叠的 条评论
为什么被折叠?



