zoukankan      html  css  js  c++  java
  • OC

    使用系统的方法来监听网络状态


    • 系统的方法是通过通知机制来实现网络状态的监听
    • 实现网络状态监听的步骤

      • 定义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");
        	}
        	else if ([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];

         

     
     
  • 相关阅读:
    leetcode 150 逆波兰表达式求值
    leetcode 15 三数之和
    leetcode 12题 数字转罗马数字
    leetcode 134 加油站问题
    socket编程之多次收发数据
    socket编程
    random实现验证码功能
    ECMAScript运算符
    JavaScript数据类型
    window对象
  • 原文地址:https://www.cnblogs.com/funny11/p/4948996.html
Copyright © 2011-2022 走看看