溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

開源中國iOS客戶端學習——(六)網絡連接檢測

發布時間:2020-03-31 19:06:18 來源:網絡 閱讀:7998 作者:新風作浪 欄目:移動開發

         開源中國iOS客戶端基于網絡同步數據,從而達到與網頁看到同樣數據效果,所以在啟動程序的時候需要檢查網絡;這也是每一個聯網應用啟動的第一步,如果聯網應用沒有檢查網絡,蘋果公司將不予以審核通過;

       開源中國iOS客戶端大牛們在寫網絡檢測時很迷惑人,開始以為他們用的是ASI類庫做的網絡檢測,今天才看明白,他們并不是用的ASI類庫檢測,而是用到AFNetworking這個類庫里一個實例方法做網絡連接檢測;


先看Appdelegate文件:

在application:didFinishLaunchingWithOptions:方法里

//檢查網絡是否存在 如果不存在 則彈出提示     [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];

在applicationDidBecomeActive:方法里

- (void)applicationDidBecomeActive:(UIApplication *)application {          [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];     if ([Config Instance].isNetworkRunning == NO) {         UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"未連接網絡,將使用離線模式" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:nil,nil]; 		[myalert show];     } }

都用到了[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];再看看Config和CheckNetwork這兩個類定義

Config類的Instance方法,

static Config * instance = nil; +(Config *) Instance {     @synchronized(self)     {         if(nil == instance)         {             [self new];         }     }     return instance; }
從字面意思也能推測出是給Cinfig類實例化用的,isNetworkRunning是BOOL型變量

CheckNetwork在ASIHttp文件里,和ASI類庫放到一塊的,(里面漢字出現亂碼)

+(BOOL)isExistenceNetwork { //	BOOL isExistenceNetwork; //	Reachability *r = [Reachability reachabilityWithHostName:@"www.oschina.net"]; //    switch ([r currentReachabilityStatus]) { //        case NotReachable: //			isExistenceNetwork=FALSE; //            //   NSLog(@"娌℃湁緗戠粶"); //            break; //        case ReachableViaWWAN: //			isExistenceNetwork=TRUE; //            //   NSLog(@"姝e湪浣跨敤3G緗戠粶"); //            break; //        case ReachableViaWiFi: //			isExistenceNetwork=TRUE; //            //  NSLog(@"姝e湪浣跨敤wifi緗戠粶");         //            break; //    } //	return isExistenceNetwork;          return YES; } 
本來是使用蘋果官方提供的Reachability來檢測網絡連接狀況,但是大牛們又給注釋掉了,return YES;

也就是[Config Instance].isNetworkRunning=YES;

但是當我把iMac網線拔掉運行的時候卻能檢測出網絡無連接,通過查找 “錯誤 網絡無連接”

開源中國iOS客戶端學習——(六)網絡連接檢測  開源中國iOS客戶端學習——(六)網絡連接檢測

發現他們都在AFNetworking類庫

- (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure  方法里面,

這個方法使用AFHTTPRequestOperation和“PATCH”請求HTTP客戶端操作隊列,使用到了block塊(iOS 4.0+特性),URL請求成功執行success塊里操作,這里面block塊沒有返回值,接受兩個參數,創建請求操作和響應數據請求,URL請求失敗執行failure里面的方法,這個block塊里仍沒有返回值,接受兩個參數創建請求操作和NSError對象,描述網絡或解析錯誤狀況;

所以才有了上面截圖中網絡的連接檢測,拿源碼中一處來舉例

開源中國iOS客戶端學習——(六)網絡連接檢測



正在學習過程中,錯誤之處請指正,歡迎交流,共同學習;

歡迎轉載分享,請注明出處http://blog.csdn.net/duxinfeng2010


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女