由于项目中要实现对网络的监控,实时网络的获取,来实现本地列表在无网络情况下也能显示之前网络连接最后一次刷新的数据,来学习下网络的监控。
Reachability 获取当前网络状态
1 添加 Reachability.h 和 Reachability.m 两个源文件 ,并在build phases中的第三个选项link SystemConfiguration.framework。
2 在代码中添加头文件Reachability.h
Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) {
case NotReachable:
// 没有网络连接。
break;
case ReachableViaWWAN:
// 使用3G网络
break;
case ReachableViaWiFi:
// 使用WiFi网络
break;
}
AFNetWorking实现对网络的实时监测。 因为AFNetWorking几乎现在通用,现在还支持对网络的监听。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[AFNetworkReachabilityManager sharedManager]startMonitoring]; // 在AppDelegate 中开启监听
[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
//网络变化时的回调方法
}];
return YES;
}
然后在需要实时监听网络的控制器中注册监听者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifi:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
- (void)notifi:(NSNotification *)noti{
NSDictionary *dic = noti.userInfo;
//获取网络状态
status = [[dic objectForKey:@"AFNetworkingReachabilityNotificationStatusItem"] integerValue];
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知网络,一般是网络不发生改变的时候");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手机流量上网");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi上网");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"木有网络");
break;
default:
break;
}
}
- (void)dealloc {
//注销监听者
[[NSNotificationCenter defaultCenter] removeObserver:self];
}