iOS 使用AFNetWorking監聽APP網路狀態變化(可用於更改快取策略、提示網路等)
阿新 • • 發佈:2019-02-16
前言
我們知道在APP開發過程中,監聽手機當前的網路狀態還是一個很常用的方法,這裡我來為大家接受一種使用AFNetWorking來監聽當前的網路狀態的方法;網路監聽對程式開發的幫助有很多:比如下載時在不同的網路狀態下使用不同下載策略、快取策略、或者就是一個單純的提示
使用控制元件
在這裡我使用的是AFNetWorking 3.0之前的版本,我並沒有測試過最新的3.0.4版本是否可以正常使用,但是我認為是不影響的,如果各位在測試過程中,有什麼問題的話請直接私信我。
程式碼實現
首先我們新建一個繼承與NSObject的類,編寫一個單例。
NetworkingTools.h
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@interface NetworkingTools : NSObject
+ (AFHTTPRequestOperationManager *)sharedManager;
@end
NetworkingTools.m
#import "NetworkingTools.h"
#import "AFNetworking.h"
@implementation NetworkingTools
+ (AFHTTPRequestOperationManager *)sharedManager {
static AFHTTPRequestOperationManager * manager = nil ;
if (!manager) {
manager = [AFHTTPRequestOperationManager manager];
}
return manager;
}
@end
可以看到這基本上就是一個很簡單的單例。相信大家都不存在什麼問題。
接下來會給大家看一個方法,也就是監聽網路狀態的方法,那麼這裡我推薦可以將這個方法在APPDelegate.m裡面進行監聽。
- (void)listenNetWorkingPort{
[[NSURLCache sharedURLCache] setMemoryCapacity:5 * 1024 * 1024];
[[NSURLCache sharedURLCache] setDiskCapacity:50 * 1024 * 1024];
AFHTTPRequestOperationManager * manager = [NetworkingTools sharedManager];
// 設定網路狀態變化回撥
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
// 設定網路請求的快取政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataDontLoad;
NSLog(@"斷網狀態");
// [UIAlertView showConfigPrompt:NSLocalizedString(@"當前沒有網路,請檢查你的網路設定", nil)];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
// 設定網路請求的快取政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
NSLog(@"4G狀態");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
// 設定網路請求的快取政策
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
NSLog(@"WiFi狀態");
break;
default:
break;
}
}];
// 啟動網路狀態監聽
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
後記
目前為大家帶來的都是些比較簡單的小技巧和工具,希望和大家共同交流和進步。也很想寫一遍比較充實的乾貨,但是目前水平和各方面的限制,就先這樣了。