版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337719
做iOS开发的对AFNetworking这个三方库肯定不会陌生,这是一个网络请求的三方库,很多App中都使用了该库,当然也有公司内会自己封装一套网络请求的类。我在项目中使用的都是AFNetworking这个三方库来请求网络数据的。
在AF2.x的时候AF是基于NSURLConnection和新的NSURLSession进行封装的,在NSURLConnection被苹果弃用之后,AF就开始专门基于NSURLSession进行封装了。在AF2.x的时候我们常用的请求管理类是AFHTTPRequestOperationManager,而在AF3.x中我们使用的请求管理类是AFHTTPSessionManager。
利用AFNetworking监听全局网络状态:
在AFNetworking有一个类AFNetworkReachabilityManager,它是用来监听网络状态的,包括手机网络、WI-FI网络、无网络。我们可以对AFNetworking进行封装,然后利用我们自己的封装类对网络进行监听。这里假设我们封装类名为HttpTool。我们将HttpTool写成一个单例,并且给它一个属性network,network是BOOL类型,我们可以根据network的值来判断当前的网络状态。看代码:
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
httpTool = [superallocWithZone:NULLinit];
httpToolnetworkIsOrNot;
});
returnhttpTool;;
}
AFNetworkReachabilityManager *manager = AFNetworkReachabilityManagersharedManager;
manager startMonitoring;
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status ==AFNetworkReachabilityStatusNotReachable) {
NSLog(@"没有网络");
_network =NO;
}else{
NSLog(@"有网络");
_network =YES;
}
}];
}
在将HttpTool创建为单例的时候就调用了networkIsOrNot方法,在networkIsOrNot方法中根据是否有网络分别给_network这个属性进行赋值。在AppDelegate中的didFinishLaunchingWithOptions:方法中调用HttpTool的shareHttpTollObject方法。这样我们就能在任何地方通过HttpToll的network这个属性来判断当前的网络状态了。