iOS之Reachability和AFN时刻检测网络状态

作者: LuxDark | 来源:发表于2016-04-13 13:06 被阅读6316次

今天项目要做一个优化,把上报失败的数据保存起来,等有网络的时候就上传服务器,所以这里就要用到实时检测网络的功能了。刚开始我的思路是自己注册一个全局的通知来实现,但是又想了解下别人的思路,于是上网搜了下就搜到了Reachability和AFN都可以实现的。但是我个人觉得AFN比较好用,当程序在后台运行时,也可以检测网络状态的改变,省去了不少的麻烦。


废话少说,进入主题吧~

一、AFNetworing检测网络
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    // 当网络状态改变时调用
    switch (status) {
        case AFNetworkReachabilityStatusUnknown:
            NSLog(@"未知网络");
            break;
        case AFNetworkReachabilityStatusNotReachable: 
            NSLog(@"没有网络");
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN:
            NSLog(@"手机自带网络");
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi: 
            NSLog(@"WIFI");
            break;
    }
}];

//开始监控
[manager startMonitoring]    
二、Reachability
1.注册通知
[[NSNotificationCenter defaultCenter]addObserver:self 
selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];

// 创建Reachability
Reachability *reachability = [Reachability reachabilityForInternetConnection];

// 开始监控网络(一旦网络状态发生改变, 就会发出通知kReachabilityChangedNotification)
[reachability startNotifier];
2.监听方法
- (void)networkStateChange
{
// 1.检测网络状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];

// 2.检测手机是否能上网络
Reachability *connect = [Reachability reachabilityForInternetConnection];

// 3.判断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) {
       NSLog(@"有wifi");
   } 
  else if ([connect currentReachabilityStatus] != NotReachable) {
       NSLog(@"使用手机自带网络进行上网");
   } 
 else {
       NSLog(@"没有网络");
   }
}

以上为两种检测网络状态的方法,我个人觉得AFN比较好用,希望对大家有所帮助。

相关文章

网友评论

  • 西叶lv:苹果官网的是不是得下载文件???
  • ee384e12202d:但我使用afn会导致控制器不销毁啊
  • zcz:不错不错,精简又好用。
  • 攻城:这个方法写在哪 ?会一断网就弹alertView提示“你的网络不好”?
  • 小贤哥:AF网络监控能检测到是否真的可以上网吗?而不是伪连接;比如公共WiFi有些是要鉴权网页的,虽然连上去,但并不能请求数据
    纠结的哈士奇:@小贤哥 试过了,然后发现有点问题,最新的issue就是我遇到的。。。

    不过好像没人解决:joy:
    小贤哥:@纠结的哈士奇 确实,AF和Reachability 是基于本地连接来检测的,只要你本地连接上去了就会认为网络连接上了,所以解决的方法就是再加一个基于ping值的监测,只要ping值过大,就是伪连接,你可以试试RealReachability这个库,很好地解决了这个问题
    纠结的哈士奇:不能 ,所以想问下,这个问题,你现在找到好的解决方案了吗
  • feng_dev:就喜欢你这种 博客 ,精简 好用
  • 32dbcf6aabbc:长见识了
  • 9f94d02340f1:不错,长见识了!
  • 游历各国:作者能说下AF好在哪里吗?就单单列出两种方式的用法而已
    LuxDark:@大尾巴熊 因为AFN用的是block,代码紧凑,方便阅读和使用,而且当程序在后台运行时也可以检测到网络的改变。这是我个人的观点,谢谢你的提问。

本文标题:iOS之Reachability和AFN时刻检测网络状态

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