前言
在開(kāi)發(fā)App中我們常常需要監(jiān)控設(shè)備的網(wǎng)絡(luò)狀態(tài)标锄,然后根據(jù)變化給出用戶(hù)提示或者作出相應(yīng)的處理以提升用戶(hù)的使用體驗(yàn)。蘋(píng)果官方提供了一個(gè) Reachability 用戶(hù)監(jiān)控網(wǎng)絡(luò)狀態(tài)的變化茁计,不過(guò)使用起來(lái)較麻煩料皇,AFNetwork && Alamofire 其實(shí)已經(jīng)給我們提供了這個(gè)功能。
使用AFNetwork:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 當(dāng)網(wǎng)絡(luò)狀態(tài)改變時(shí)調(diào)用
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知網(wǎng)絡(luò)");
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"網(wǎng)絡(luò)不可用");
}
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手機(jī)自帶網(wǎng)絡(luò)");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
}
}];
//開(kāi)始監(jiān)控
[manager startMonitoring];
return YES;
}
使用Alamofire:
var manager: NetworkReachabilityManager?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//監(jiān)控網(wǎng)絡(luò)
manager = NetworkReachabilityManager(host: "www.apple.com")
manager?.listener={ status in
switch status
{
case .notReachable:
print("網(wǎng)絡(luò)不可用")
break
case .unknown:
print("未知網(wǎng)絡(luò)")
break
case .reachable(.ethernetOrWiFi):
print("WIFI網(wǎng)絡(luò)")
break
case .reachable(.wwan):
print("4G網(wǎng)絡(luò)")
break
}
}
manager?.startListening()
return true
}
注意:
使用AFNetwork沒(méi)有什么問(wèn)題星压,但在使用Alamofire的時(shí)候要注意manager對(duì)象是否被銷(xiāo)毀践剂,因?yàn)殇N(xiāo)毀對(duì)象的時(shí)候會(huì)調(diào)用stopListening方法,停止監(jiān)控娜膘,這之后即使網(wǎng)絡(luò)狀態(tài)改變逊脯,也不會(huì)進(jìn)回調(diào)方法。
deinit
{
stopListening()
}