程序员

AFNetworking网络监测及访问管理

2019-01-26  本文已影响15人  溪石iOS

AFNetworking已经将网络状态封装为AFNetworkReachabilityManager,这是一个单例,可以直接获取:

AFNetworkReachabilityManager *reachManager = [AFNetworkReachabilityManager manager];

另外也可以从AFHTTPSessionManagerreachabilityManager属性获取,两者是一致的。

网络状态监听

通过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直接判断。

上一篇下一篇

猜你喜欢

热点阅读