網(wǎng)絡(luò)實時監(jiān)測

在項目中實現(xiàn)網(wǎng)絡(luò)的實時監(jiān)測有兩種方式:一種是采用第三方網(wǎng)絡(luò)請求的網(wǎng)絡(luò)檢測方法瘩例,一種是使用OC自帶的網(wǎng)絡(luò)檢測方法。我項目中采用的是第二種甸各。

具體方法如下:

1垛贤、采用AF的網(wǎng)絡(luò)檢測,并實時發(fā)送通知趣倾,以達到網(wǎng)絡(luò)實時監(jiān)測的目的聘惦。

+ (AFNetworkReachabilityManager *)reachability

{

// 1.獲得網(wǎng)絡(luò)監(jiān)控的管理者

AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

// 2.設(shè)置網(wǎng)絡(luò)狀態(tài)改變后的處理

[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

// 當(dāng)網(wǎng)絡(luò)狀態(tài)改變了, 就會調(diào)用這個block

switch (status) {

case AFNetworkReachabilityStatusUnknown: // 未知網(wǎng)絡(luò)

NSLog(@"未知網(wǎng)絡(luò)");

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoNetWorkNotification" object:nil userInfo:@{@"flag":@1}];

break;

case AFNetworkReachabilityStatusNotReachable: // 沒有網(wǎng)絡(luò)(斷網(wǎng))

NSLog(@"沒有網(wǎng)絡(luò)(斷網(wǎng))");

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoNetWorkNotification" object:nil userInfo:@{@"flag":@0}];

break;

case AFNetworkReachabilityStatusReachableViaWWAN: // 手機自帶網(wǎng)絡(luò)

NSLog(@"手機自帶網(wǎng)絡(luò)");

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoNetWorkNotification" object:nil userInfo:@{@"flag":@1}];

break;

case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI

NSLog(@"WIFI");

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoNetWorkNotification" object:nil userInfo:@{@"flag":@1}];

break;

}

}];

// 3.開始監(jiān)控

[mgr startMonitoring];

return mgr;

}

代碼寫在網(wǎng)絡(luò)請求的最底層,但是只有在調(diào)用單例的時候才會觸發(fā)網(wǎng)絡(luò)的檢測儒恋,并且是以回調(diào)的時候進行網(wǎng)絡(luò)的檢測善绎,所以個人覺得這種方法比較適合用來判斷是否進行網(wǎng)絡(luò)請求,不適合實時的網(wǎng)絡(luò)監(jiān)測用來改變頁面布局碧浊。

2涂邀、OC自帶的網(wǎng)絡(luò)檢測——Reachability瘟仿。(https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip)

Reachability的使用箱锐,首先將Reachability.h及Reachability.m導(dǎo)入工程,其次AppDelegate.h中添加頭文件劳较,之后需要導(dǎo)入SystemConfiguration.framework驹止,最后就是代碼了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

NSUserDefaults * user = [NSUserDefaults standardUserDefaults];

[user setObject:@1 forKey:NETWORK];

[user synchronize];

//設(shè)置網(wǎng)絡(luò)檢測的站點

NSString * remoteHostName = @"www.baidu.com";

self.reachablity = [Reachability reachabilityWithHostName:remoteHostName];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachablityStatusChange:) name:kReachabilityChangedNotification object:nil];

[self.reachablity startNotifier];

return YES;

}

-(void)reachablityStatusChange:(NSNotification *)notification

{

Reachability * curReach = [notification object];

//? ? NSParameterAssert([curReach isKindOfClass:[Reachability class]]);(此處不注釋掉網(wǎng)絡(luò)有變化的時候代碼直接crash了观蜗,不清楚為什么)

[self updateInterfaceWithReachablity:curReach];

}

-(void)updateInterfaceWithReachablity:(Reachability *)reachablity

{

if(reachablity == _reachablity)

{

NSUserDefaults * user = [NSUserDefaults standardUserDefaults];

NetworkStatus netStatus = [reachablity currentReachabilityStatus];

switch (netStatus) {

case NotReachable:{

[user setObject:@0 forKey:NETWORK];

[[NSNotificationCenter defaultCenter] postNotificationName:NETWORKCHANGE object:nil userInfo:@{NETWORK:@0}];

}

break;

case ReachableViaWWAN:{

[user setObject:@1 forKey:NETWORK];

[[NSNotificationCenter defaultCenter] postNotificationName:NETWORKCHANGE object:nil userInfo:@{NETWORK:@1}];

}

break;

case ReachableViaWiFi:{

[user setObject:@1 forKey:NETWORK];

[[NSNotificationCenter defaultCenter] postNotificationName:NETWORKCHANGE object:nil userInfo:@{NETWORK:@1}];

}

break;

default:

break;

}

[user synchronize];

}

}

-(void)dealloc

{

[_reachablity stopNotifier];

}

這段代碼里面為什么在發(fā)送通知的時候還需要存沙盒一份呢臊恋?原因是在無網(wǎng)絡(luò)的情況下是沒有必要進行網(wǎng)絡(luò)請求的。但是如果在每個接口前都寫一遍網(wǎng)絡(luò)監(jiān)測墓捻,那未免也太傻了抖仅,所以不如存一份,在進行最底層的網(wǎng)絡(luò)請求前先取出來判斷一下是否有網(wǎng)絡(luò)再決定是否要繼續(xù)進行數(shù)據(jù)請求。

網(wǎng)絡(luò)已經(jīng)檢測了撤卢,隨著網(wǎng)絡(luò)的變化也發(fā)送通知了环凿,在需要監(jiān)測網(wǎng)絡(luò)變化的頁面添加監(jiān)聽,然后根據(jù)網(wǎng)絡(luò)的變化調(diào)整頁面布局或者數(shù)據(jù)請求貌似就好了放吩,但是智听,其實還有一個潛在的問題,那就是當(dāng)從無網(wǎng)狀態(tài)恢復(fù)網(wǎng)絡(luò)狀態(tài)的時候渡紫,發(fā)送通知給各個頁面到推,這個時候需要自動刷新數(shù)據(jù),如果不做任何處理的話惕澎,各個頁面會同時請求數(shù)據(jù)莉测,但是其實我們只需要刷新當(dāng)前頁面的數(shù)據(jù),其他頁面唧喉,當(dāng)進入那個頁面的時候再刷新就好了悔雹。這個時候我們需要怎么做呢?

我采取的也是笨辦法——通過標志位欣喧。進入頁面置為YES腌零,離開頁面置為NO,當(dāng)頁面接收到通知的時候唆阿,只有標志位為YES的時候才會進行數(shù)據(jù)的請求益涧,這樣就解決網(wǎng)絡(luò)恢復(fù)各個頁面同時請求數(shù)據(jù)的問題了。個人覺得應(yīng)該還會有更好的辦法驯鳖,但是目前還沒有想到闲询,之后再補充吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浅辙,一起剝皮案震驚了整個濱河市扭弧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌记舆,老刑警劉巖鸽捻,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泽腮,居然都是意外死亡御蒲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門诊赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厚满,“玉大人,你說我怎么就攤上這事碧磅〉夤浚” “怎么了遵馆?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丰榴。 經(jīng)常有香客問我团搞,道長,這世上最難降的妖魔是什么多艇? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任逻恐,我火速辦了婚禮,結(jié)果婚禮上峻黍,老公的妹妹穿的比我還像新娘复隆。我一直安慰自己,他們只是感情好姆涩,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布挽拂。 她就那樣靜靜地躺著,像睡著了一般骨饿。 火紅的嫁衣襯著肌膚如雪亏栈。 梳的紋絲不亂的頭發(fā)上唉铜,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天颅崩,我揣著相機與錄音,去河邊找鬼灸芳。 笑死察署,一個胖子當(dāng)著我的面吹牛闷游,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贴汪,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼脐往,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扳埂?” 一聲冷哼從身側(cè)響起业簿,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阳懂,沒想到半個月后梅尤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡希太,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年克饶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誊辉。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亡脑,靈堂內(nèi)的尸體忽然破棺而出堕澄,到底是詐尸還是另有隱情邀跃,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布蛙紫,位于F島的核電站拍屑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坑傅。R本人自食惡果不足惜僵驰,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唁毒。 院中可真熱鬧蒜茴,春花似錦、人聲如沸浆西。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽近零。三九已至诺核,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間久信,已是汗流浹背窖杀。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裙士,地道東北人陈瘦。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像潮售,于是被迫代替她去往敵國和親痊项。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容