iOS開發實踐之網路檢測Reachability

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.