iOS網路通訊——監測網路狀態:Reachability(可達性),iosreachability

來源:互聯網
上載者:User

iOS網路通訊——監測網路狀態:Reachability(可達性),iosreachability

1.iOS平台是按照一直有網路連接的思路來設計的,開發人員利用這一特點創造了很多優秀的第三方應用。大多數的iOS應用都需要連網,甚至有些應用嚴重依賴網路,沒有網路就無法正常工作。

2.在你的應用嘗試通過網路擷取資料之前,你需要知道當前裝置是否知道串連上了網路,甚至有時候你可能還需要知道當前網路是由wifi還是由移動蜂窩網路提供的。

3.“在網路訪問失敗的時候,應用沒有做出適當的提示”是蘋果的iOS審核團隊拒絕一個應用的常見理由。蘋果要求你必須先檢測網路連接狀態,當網路停用時候以某種方式告知使用者,或者用其他優雅的方式進行處理。

 

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

Reachability類:

1.這個類用於檢測當前網路狀態,它不是SDK的一部分,可以在iOS Developer Library裡找到這份代碼。

從蘋果網站上下載Reachability.zip檔案,解壓之。

2.重用Reachability類

    (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類。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.