標籤:center 3.1 start 標籤 view img 枚舉 rem local
在網路應用開發中。有時須要對使用者裝置的網路狀態進行即時監控。以至於對使用者進行友好提示 或者依據不同網路狀態處理不一樣的邏輯(如視頻播放app,依據當前的網路情況自己主動切換視訊清晰度等等)。用Reachability實現網路的檢測。
蘋果官方提供了Reachability的示範範例程式,便於開發人員檢測網路狀態
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
1、 網路狀態枚舉NetworkStatus:
NotReachable = 0, //沒有網路
ReachableViaWiFi, //Wi-Fi網路
ReachableViaWWAN //移動網路(非Wi-Fi)
2、Reachability經常用法:
/*! * 通過host執行個體化Reachability */+ (instancetype)reachabilityWithHostName:(NSString *)hostName;/*! * 通過ip地址執行個體化Reachability */+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress;/*! * 擷取網路連接對象 */+ (instancetype)reachabilityForInternetConnection;/*! * 擷取Wi-Fi連結化物件 */+ (instancetype)reachabilityForLocalWiFi;/*! * 監聽網路變化方法 */- (BOOL)startNotifier; //開始監聽- (void)stopNotifier; //停止監聽//當前網路連接狀態- (NetworkStatus)currentReachabilityStatus;
3、監聽網路變化:kReachabilityChangedNotification
3.1、注冊網路狀態通知
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(netWorkStatusChange)name:kReachabilityChangedNotificationobject:nil];
3.2、 擷取Reachability對象
self.reachability = [Reachability reachabilityForInternetConnection];
3.3、開始監聽網路變化
[self.reachability startNotifier];
3.4、關閉通知並釋放對象
-(void)dealloc{
[self.reachabilitystopNotifier];
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
4、Reachability的使用步驟
4.1、加入架構SystemConfiguration.framework(xocde5之後自己主動加入)
4.2、引入源碼
4.3、匯入標頭檔
#import "Reachability.h"
4.4、假設Reachability執行報arc錯誤。
則原始碼設定arc編譯環境(眼下最新下載Reachability是arc模式)。
假設你的項目使用的非 ARC 模式。則為 ARC 模式的代碼檔案增加 -fobjc-arc 標籤。
假設你的項目使用的是 ARC 模式,則為非 ARC 模式的代碼檔案增加 -fno-objc-arc 標籤。
5、栗子:
NetWorkTool.m
#import "NetWorkTool.h"#import "Reachability.h"@implementation NetWorkTool//檢查是否Wi-Fi網路+(BOOL)isEnableWIFI{ return [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable;}//檢查是否移動網路+(BOOL)isEnableWWAN{ //return [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable; return [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == ReachableViaWWAN;}@end
ViewController.m
#import "ViewController.h"#import "Reachability.h"#import "NetWorkTool.h"@interface ViewController ()@property(nonatomic,strong) Reachability *reachability;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //注冊網路狀態通知 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(netWorkStatusChange) name:kReachabilityChangedNotification object:nil]; //擷取Reachability對象 self.reachability = [Reachability reachabilityForInternetConnection]; //開始監聽網路變化 [self.reachability startNotifier];}//關閉通知並釋放對象-(void)dealloc{ [self.reachability stopNotifier]; [[NSNotificationCenter defaultCenter] removeObserver:self];}//網路變化-(void)netWorkStatusChange{ NSLog(@"當前網路發生改變"); [self checkCurNetWork];}//檢測網路-(void) checkCurNetWork{ if ([NetWorkTool isEnableWIFI]) { NSLog(@"當前網路為Wi-Fi網路"); }else if ([NetWorkTool isEnableWWAN]){ NSLog(@"當前網路為移動網路"); }else{ NSLog(@"沒網路連接"); }}
iOS開發實踐之網路檢測Reachability