IOS網絡——檢測網絡狀態:Reachability

下載代碼:html

https://developer.apple.com/library/ios/samplecode/Reachability/Listings/Reachability_Reachability_m.htmlios

1.iOS平臺是按照一直有網絡鏈接的思路來設計的,開發者利用這一特色創造了不少優秀的第三方應用。大多數的iOS應用都須要聯網,甚至有些應用嚴重依賴網絡,沒有網絡就沒法正常工做。網絡

2.在你的應用嘗試經過網絡獲取數據以前,你須要知道當前設備是否知道鏈接上了網絡,甚至有時候你可能還須要知道當前網路是由wifi仍是由移動蜂窩網絡提供的。app

3.「在網絡訪問失敗的時候,應用沒有作出適當的提示」是蘋果的iOS審覈團隊拒絕一個應用的常見理由。蘋果要求你必須先檢測網絡鏈接狀態,當網絡不可用的時候以某種方式告知用戶,或者用其餘優雅的方式進行處理。框架

 

***********************異步

Reachability類:網站

1.這個類用於檢測當前網絡狀態,它不是SDK的一部分,能夠在iOS Developer Library裏找到這份代碼。設計

從蘋果網站上下載Reachability.zip文件,解壓之。code

2.重用Reachability類server

    (1)把Reachability.h和Reachability.m文件拖到項目中。

    (2)添加框架:SystemConfiguration.framework。

3.同步的Reachability

    (1)使用同步的方式是比較簡單,導入Reachability.h頭文件,而後經過代碼檢查網絡:

        #import 「Reachability.h」

        。。。some code omitted…

        Reachability *reach = [Reachability reachabilityForInternetConnection];

        NetworkStatus status = [reach currentReachabilityStatus];

     (2)經過檢查某個主機可否訪問來判斷當前網絡是否可用:

        Reachability *reach = [Reachability reachabilityWithHostName:@「www.apple.com」];

        NetworkStatus status = [reach currentReachabilityStatus];

     (3)案例:

        建立一個工程,並添加Reachability.h和Reachability.m到工程中,並連接SystemConfiguration.framework.

        在AppDelegate.h頭文件中導入Reachability.h,並添加一個實例方法。如圖:

在AppDelegate.m中這樣實現:如圖:

4.異步的Reachability

    (1)異步的方式稍微複雜,不過經過這種方式能夠來訂閱實時的網絡狀態變化通知。導入Reachability.h頭文件,而後註冊一個對象來訂閱網絡狀態變化的信息,網絡狀態變化的信息名稱爲kReachabilityChanged-Notification.以下:

    [[NSNotificationCenter defaultCenter] addObserver:self

        selector:@selector(reachabilityChanged:)

        name:kReachabilityChangedNotification

        object:nil];

    (2)你須要建立一個Reachability對象實例並開始向外發佈網絡狀態變化的消息:

        Reachability *reach = [[Reachability reachabilityWithHostName:@「www.apple.com」] retain];

        [reach startNotifier];

    (3)當網絡狀態發生變化的時候,Reachability對象將調用reachabilityChanged:方法,能夠在這個方法裏面獲取當前的網絡狀態,而後作相應的處理。

        - (void)reachabilityChanged:(NSNotification *)notification{

            Reachability *reach = [notification object];

            if([reach isKindOfClass:[Reachability class]]){

                NetworkStatus status = [reach currentReachabilityStatus];

                //Insert your code here

            }                   

        }

 

****************************

5.原生 Reachability API

前面將的Reachability類其實是蘋果公司對SCNetworkReachability API的封裝,這個API定義在SystemConfigure.framework庫中。若是有其餘特別的需求,也能夠直接使用這個原生的SCNetworkReachability類。

相關文章
相關標籤/搜索