iOS DeveloperiOS移动开发社区iOS开发技术分享

5.1 网络基础->1.4 网络状态监控

2016-04-13  本文已影响188人  蓝田_Loto

本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。

1.4.1 网络状态监控-Reachability

在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)

根据用户的网络状态进行智能处理,节省用户流量,提高用户体验

- WIFI、3G网络:自动下载高清图片
- 低速网络:只下载缩略图
- 没有网络:只显示离线的缓存数据

Reachability的使用步骤:

(1)添加框架SystemConfiguration.framework

(2)添加源代码

苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态

https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

(3)包含头文件

#import "Reachability.h"

Reachability常见方法

1.主动监测监测网络状态

// 是否WIFI
+ (BOOL)isEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

// 是否3G
+ (BOOL)isEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

2.监控网络状态

1> 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];

2> 开始监听网络状态
// 获得Reachability对象
self.reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络
[self.reachability startNotifier];

3> 移除监听
[self.reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];

代码示例:
#import "Reachability.h"
#import "ViewController.h"

@interface ViewController ()
@property(nonatomic, strong) Reachability *reachability; //监控网络
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [self getNetworkStatus];

  // 监听网络状态发生改变的通知
  [[NSNotificationCenter defaultCenter]
      addObserver:self
         selector:@selector(getNetworkStatus)
             name:kReachabilityChangedNotification
           object:nil];

  // 获得Reachability对象
  self.reachability = [Reachability reachabilityForInternetConnection];
  // 开始监控网络(一旦网络状态发生改变,就会发出通知kReachabilityChangedNotification)
  [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;
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

@end


1.4.2 网络状态监控-AFN框架

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
  AFNetworkReachabilityStatusUnknown = -1,         // 未知网络
  AFNetworkReachabilityStatusNotReachable = 0,     // 无法联网
  AFNetworkReachabilityStatusReachableViaWWAN = 1, // 手机自带网络
  AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI
};

代码示例:

#import "ViewController.h"
#import <AFNetworking.h>

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  // 开始网络监控(获得网络监控的管理者)
  AFNetworkReachabilityManager *mgr =
      [AFNetworkReachabilityManager sharedManager];

  // 设置网络状态改变后的处理
  [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    // 当网络状态改变了, 就会调用这个block
    switch (status) {
    case AFNetworkReachabilityStatusUnknown: // 未知网络
      NSLog(@"未知网络");
      break;

    case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
      NSLog(@"没有网络(断网)");
      break;

    case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
      NSLog(@"手机自带网络");
      break;

    case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
      NSLog(@"WIFI");
      break;
    }
  }];

  // 开始监控
  [mgr startMonitoring];

  // 拿到当前网络状态
  // mgr.networkReachabilityStatus;
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

@end



作者:蓝田(Loto)
出处: 简书

如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
评论区回复微信(加好友请注明“简书+称呼”)发送邮件shorfng@126.com



本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

上一篇下一篇

猜你喜欢

热点阅读