AFNetworking-网络监听

本文聚焦于AFNetworking中的AFNetworkReachabilityManager,解析其属性和方法,指导如何在项目中实现网络状态监听,特别是在AppDelegate中的应用。通过实例代码,展示网络监听的关键步骤。

在我们的项目中很多时候会对网络进行监听,以便在网络状态改变的时候app可以做出一些事件,这篇文章主要是介绍AFNetworking中的AFNetworkReachabilityManager这个类的属性和方法,以及怎么去使用这个类.


//通过导入了这个头文件,我们得知:网络监控的实现是依赖SystemConfiguration这个api的
#import <SystemConfiguration/SystemConfiguration.h>


typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {

    /**
     *  未知网络
     */
    AFNetworkReachabilityStatusUnknown          = -1,
    /**
     *  无网络
     */
    AFNetworkReachabilityStatusNotReachable     = 0,
    /**
     *  wwan手机自带网络
     */
    AFNetworkReachabilityStatusReachableViaWWAN = 1,
    /**
     *  wifi
     */
    AFNetworkReachabilityStatusReachableViaWiFi = 2,
};

 //当前网络的连接状态
@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;

// 当前网络是否可达
@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;

 //当前网络是否连接wwan
@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;

 //当前网络是否连接Wifi
@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;

 //以下提供了5种初始化方法,能够满足大部分的需求。
+ (instancetype)sharedManager;

+ (instancetype)manager;

 //监听制定domain的网络状态。
+ (instancetype)managerForDomain:(NSString *)domain;
+ 
// 监听某个socket地址的网络状态,
+ (instancetype)managerForAddress:(const void *)address;

- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;

 //开始监听网络的状态
- (void)startMonitoring;

 //停止监听网络状态
- (void)stopMonitoring;

// 返回一个网络状态的本地语言的字符串。往往我们可以根据这个字符串来告诉用户,当前网络发生了什么,当然,也可以根据状态自定义提示文字。。
- (NSString *)localizedNetworkReachabilityStatusString;

 //设置网络状态改变的回调,
- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;


 /*这个是与网络状态变化相关的通知。接受的通知中会有一个userinfo 是一个NSDictionary 其中key就是

 AFNetworkingReachabilityNotificationStatusItem

 *** 这简单的两行代码能够告诉我们的是,我们平时的开发中 但凡设计到发通知的功能,我们应该把通知的字符串封装到一个专有的文件中,同时在文件内部按不同模块进行区分,当然必要的注释也很有必要。

 ps: FOUNDATION_EXPORT 和#define 都能定义常量。FOUNDATION_EXPORT 能够使用==进行判断,效率略高。而且能够隐藏定义细节(就是实现部分不在.中)
 */

FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification;
FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem;

下面看一下网络监听的具体应用,一般是在AppDelegate类中写如下方法


//导入头文件
#import "AFNetworkReachabilityManager.h"

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

    //1.初始化
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //2.开始监听网络的状态
    [manager startMonitoring];

    //3.设置网络状态改变的回调
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                alert.message = @"当前是未知网络";

                break;
            case AFNetworkReachabilityStatusNotReachable:
                alert.message = @"无网络连接";
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                alert.message = @"手机蜂窝网络";
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                alert.message = @"当前WiFi网络";
                break;
            default:
                break;
        }

        [alert show];
    }];

    return YES;
}

参考文章: AFNetworking 3.0 源码解读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值