1. 程式人生 > >iOS 使用AFNetWorking監聽APP網路狀態變化(可用於更改快取策略、提示網路等)

iOS 使用AFNetWorking監聽APP網路狀態變化(可用於更改快取策略、提示網路等)

前言

我們知道在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]; }

後記

目前為大家帶來的都是些比較簡單的小技巧和工具,希望和大家共同交流和進步。也很想寫一遍比較充實的乾貨,但是目前水平和各方面的限制,就先這樣了。