美文网首页程序员
AFNetworking网络监测及访问管理

AFNetworking网络监测及访问管理

作者: 溪石iOS | 来源:发表于2019-01-26 12:20 被阅读15次

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

相关文章

网友评论

    本文标题:AFNetworking网络监测及访问管理

    本文链接:https://www.haomeiwen.com/subject/ltcijqtx.html