使用系统的方法来监听网络状态系统的方法是通过通知机制来实现网络状态的监听实现网络状态监听的步骤
定义Reachability类型的成员变量来保存网络的状态
@PRoperty (nonatomic,strong) Reachability *reachability;
注册为通知中心的的观察者
// 在通知中心注册观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil];/**
* getNetworkStatus:监听到通知的回调方法
* kReachabilityChangedNotification:通知的类型,即网络状态发生改变时,触发通知
* object:传递给getNetworkStatus回调方法的参数
*/// 获取并保存网络状态self.reachability = [Reachability reachabilityForInternetConnection];// 开始监听
[self.reachability startNotifier];
在监听到通知的触发方法中判断网络的状态
- (void)getNetworkStatus
{if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable)
{NSLog(@"是WIFI");
}elseif ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable)
{NSLog(@"是手机自带网络");
}else
{NSLog(@"网络有问题");
}
}
将观察者从通知中心移除,停止监听,清空网络监听对象
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.reachability stopNotifier];self.reachability =nil;
}
使用AFNetworking监听网络状态通过AFN监听网络状态比较简单实现网络状态监听的
获取AFNetworkReachabilityManager的实例
AFNetworkReachabilityManager *manager =[AFNetworkReachabilityManager sharedManager];
设置manager在网络发生变化的时回调的Block
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"----当前网络状态---%zd", status);
}];
/*** status:表示当前网络的状态,是个枚举类型变量,具有以下取值*AFNetworkReachabilityStatusUnknown = -1*AFNetworkReachabilityStatusNotReachable = 0*AFNetworkReachabilityStatusReachableViaWWAN = 1*AFNetworkReachabilityStatusReachableViaWiFi = 2*/
开始监听
[manager startMonitoring];