AFNetworking网络监测及访问管理
2019-01-26 本文已影响15人
溪石iOS
AFNetworking已经将网络状态封装为AFNetworkReachabilityManager,这是一个单例,可以直接获取:
AFNetworkReachabilityManager *reachManager = [AFNetworkReachabilityManager manager];
另外也可以从AFHTTPSessionManager
的reachabilityManager
属性获取,两者是一致的。
网络状态监听
通过AFNetworkReachabilityManager的setReachabilityStatusChangeBlock方法,可以获得网络的状态变化:
[reachManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G/4G");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有联网");
break;
default:
NSLog(@"没有联网");
break;
}
}];
代码中将 AFNetworkReachabilityStatusUnknown
放到default中统一作为未联网处理。
网络操作管理
收到网络状态变化的通知后,需要将网络操作暂停或开启,防止各个接口报错,这里假设网络操作使用的是:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
对应状态开启或关闭操作:
[reachManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G/4G");
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi");
[manager.operationQueue setSuspended:NO];
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有联网");
default:
NSLog(@"没有联网");
[manager.operationQueue setSuspended:YES];
break;
}
}];
当前网络状态
值得注意的是以上方法在网络变化时,才能做相应处理,有时需要查看当前网络状态,可以通过AFNetworkReachabilityManager.networkReachabilityStatus直接判断。