項目開發(fā)紀實-網(wǎng)絡(luò)狀態(tài)循環(huán)檢測

這個問題困擾我有兩天,知道我對KVO有所了解,知道今天我才解決這個難題。接下來我就介紹一下我是怎么解決的??赡懿皇亲詈玫模瑲g迎看到這片博客給出更好的意見。

在開始之前我們首先要將Reachability導(dǎo)入到工程中,注意,這個文件不是采用的ARC管理,所以我們要做下手動適配。其實也不是什么高科技。如圖

添加的內(nèi)容 -fno-objc-arc ,這里主要是為了讓其適配ARC工程。這里的話多說一句,一般大家是用不到這個,如果在MRC工程下兼容ARC模式的添加的代碼是 -fobjc-arc。同樣這里也沒有什么特殊的意義,就是簡單的是適配而已。

完成了上述事情之后,我們就可以開始我們的正事了。首先我們在這里說明一下我的思路。
1.為網(wǎng)絡(luò)狀態(tài)添加觀察者。
2.實現(xiàn)觀察者觸發(fā)的動作。
忽然發(fā)現(xiàn)好簡單啊,想當初為啥沒搞出來的

首先我們給網(wǎng)絡(luò)狀態(tài)添加觀察者,代碼如下:

- (void)monitorNetWorkStatus{
    //創(chuàng)建對象  通過不斷的對百度的地址來檢測狀態(tài)
    Reachability *reach = [Reachability reachabilityWithHostname:@"www.baidu.com"];
    //2.注冊通知 監(jiān)聽網(wǎng)絡(luò)狀態(tài)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    //3.觸發(fā)通知
    [reach startNotifier];
}

這里我說明一下為啥ping百度的主機,其實吧,我就是覺得順手而已,沒有其他意義,如果讓我自己選,我更愿意pingwww.google.com. 特別說一下,本人沒有研究reachability的實現(xiàn)機制,至于更ping得原理是否一樣,我并不確定,作者只是覺得兩者很想就這樣說了。作者是一個很隨性的人,這點事情不要太糾結(jié)。染就說來的童鞋,接的私信我。

完成了上述時間之后 我們接下里實現(xiàn)通知觸發(fā)的動作代碼如下:

- (void)reachabilityChanged:(NSNotification *)center {
    //獲得reachability
    Reachability *reach = [center object];
    
    if ([reach isReachable]) {
        NSLog(@"網(wǎng)絡(luò)正常");
    } else {
        NSLog(@"網(wǎng)絡(luò)異常");
    }
}

這是目前我實現(xiàn)的思路,如果有更好的童鞋,記得私信告訴啊,親測在XCode 7.2 iOS9.2下運行沒問題。
結(jié)束語:
目前這個方法的實現(xiàn)循環(huán)監(jiān)聽有個明顯的缺陷??紤]如下情況:
我們的APP已經(jīng)發(fā)出了一個請求,在加載過程中網(wǎng)絡(luò)狀態(tài)發(fā)生了變化,例如你家wifi被隔壁老王搞壞之類的情況。這個時候我們的方法會提示網(wǎng)絡(luò)變化,但是不會停止目前的請求,這個會給用戶很不好的用戶體驗。作者現(xiàn)在已經(jīng)有思路,有時間會將實現(xiàn)給大家。如果有好的意見歡迎大家提出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容