下載代碼: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類。