iOS开发-Reachability网络状态

chatgpt/2023/9/27 16:31:32

iOS开发-Reachability网络状态

Reachablity 是一个iOS下检测,iOS设备网络环境用的库。

  • 监视目标网络是否可用
  • 监视当前网络的连接方式
  • 监测连接方式的变更情况

一、Reachability

在Podfile中引入

pod 'Reachability'

二、监听网络状态

先看下Reachability,其中两个block,reachableBlock与unreachableBlock可以很方便监听网络连接状态。

@class Reachability;typedef void (^NetworkReachable)(Reachability * reachability);
typedef void (^NetworkUnreachable)(Reachability * reachability);@interface Reachability : NSObject@property (nonatomic, copy) NetworkReachable    reachableBlock;
@property (nonatomic, copy) NetworkUnreachable  unreachableBlock;@property (nonatomic, assign) BOOL reachableOnWWAN;+(Reachability*)reachabilityWithHostname:(NSString*)hostname;
// This is identical to the function above, but is here to maintain
//compatibility with Apples original code. (see .m)
+(Reachability*)reachabilityWithHostName:(NSString*)hostname;
+(Reachability*)reachabilityForInternetConnection;
+(Reachability*)reachabilityWithAddress:(void *)hostAddress;
+(Reachability*)reachabilityForLocalWiFi;-(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;-(BOOL)startNotifier;
-(void)stopNotifier;-(BOOL)isReachable;
-(BOOL)isReachableViaWWAN;
-(BOOL)isReachableViaWiFi;// WWAN may be available, but not active until a connection has been established.
// WiFi may require a connection for VPN on Demand.
-(BOOL)isConnectionRequired; // Identical DDG variant.
-(BOOL)connectionRequired; // Apple's routine.
// Dynamic, on demand connection?
-(BOOL)isConnectionOnDemand;
// Is user intervention required?
-(BOOL)isInterventionRequired;-(NetworkStatus)currentReachabilityStatus;
-(SCNetworkReachabilityFlags)reachabilityFlags;
-(NSString*)currentReachabilityString;
-(NSString*)currentReachabilityFlags;@end

使用Reachability监听网络并且通知

SDReachManager.h

#import <Foundation/Foundation.h>
#import "Reachability.h"typedef NS_ENUM(NSInteger, SDReachStatus) {SDReachNotable = 0,SDReachableViaWWAN = 1,SDReachableViaWiFi = 2,
};@interface SDReachManager : NSObject@property (nonatomic, strong) Reachability *reach;+ (instancetype)sharedInstance;- (void)startNetNotifier;/**判断网络是否正常@return BOOL*/
- (BOOL)isReachable;/**网络连接状态,是wifi还是WWan@return 连接状态*/
- (SDReachStatus)reachStatus;@end

SDReachManager.m

#import "SDReachManager.h"
#import "SDContextManager.h"static SDReachManager *_sharedInstance = nil;@interface SDReachManager ()@end@implementation SDReachManager/**单例模式使用 dispatch_once_t if不是线程安全的@return 实例对象*/
+ (instancetype)sharedInstance {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_sharedInstance = [[SDReachManager alloc] init];});return _sharedInstance;
}- (void)startNetNotifier {_reach = [Reachability reachabilityWithHostname:@"www.laikeshuo.com"];_reach.reachableBlock = ^(Reachability * reachability) {dispatch_async(dispatch_get_main_queue(), ^{//网络可用NSLog(@"网络可用");[[NSNotificationCenter defaultCenter] postNotificationName:kNetworkStatusChangedNotification object:@YES];});};_reach.unreachableBlock = ^(Reachability * reachability) {dispatch_async(dispatch_get_main_queue(), ^{//网络不可用NSLog(@"网络不可用");[[NSNotificationCenter defaultCenter] postNotificationName:kNetworkStatusChangedNotification object:@NO];});};[_reach startNotifier];
}/**判断网络是否正常@return BOOL*/
- (BOOL)isReachable {return [SDReachManager sharedInstance].reach.isReachable;
}/**网络连接状态,是wifi还是WWan@return 连接状态*/
- (SDReachStatus)reachStatus {NetworkStatus networkStatus = [[SDReachManager sharedInstance].reach currentReachabilityStatus];SDReachStatus reachStatus = SDReachNotable;if (networkStatus == NotReachable) {reachStatus = SDReachNotable;} else if (networkStatus == ReachableViaWiFi) {reachStatus = SDReachableViaWiFi;} else if (networkStatus == ReachableViaWWAN) {reachStatus = SDReachableViaWWAN;}return reachStatus;
}@end

三、小结

iOS开发-Reachability网络状态

Reachablity 是一个iOS下检测,iOS设备网络环境用的库。
可以监视目标网络是否可用、监视当前网络的连接方式、监测连接方式的变更情况。

学习记录,每天不停进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5312946.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

bash sh 和 ./ 的区别

bash&#xff1a; 这是Bash shell的解释器。当你使用bash script.sh运行脚本时&#xff0c;你是在告诉系统使用Bash解释器来执行脚本。这意味着脚本中的所有Bash特性都可以使用。 sh&#xff1a; 这是Bourne shell的解释器。当你使用sh script.sh运行脚本时&#xff0c;你是在告…

螺旋矩阵 II——力扣59

文章目录 题目描述法一 模拟 题目描述 法一 模拟 初始化一个二维向量&#xff0c;名为matrix&#xff0c;它有n行和n列。向量的每个元素都是一个整数&#xff0c;初始化为0。初始化二维向量的语法如下&#xff1a;vector<vector<int>> matrix(n, vector<int>…

Deformable-detr在运行make.sh文件时,报NotImplementedError: Cuda is not availabel

NotImplementedError: Cuda is not availabel 当你运行下面命令报错NotImplementedError: Cuda is not availabel&#xff0c; sh make.sh根据我的经验&#xff0c;列出几条可以排查的思路。 使用nvcc -V查看一下在当前虚拟环境中使用的cuda版本。这个版本是cuda的编译版本&a…

C++ 结构体和联合体

1.结构体 结构体是一种特殊形态的类&#xff0c;它和类一样&#xff0c;可以有自己的数据成员和函数成员&#xff0c;可以有自己的构造函数和析构函数&#xff0c;可以控制访问权限&#xff0c;可以继承&#xff0c;支持包含多态&#xff0c;结构体定义的语法和类的定义语法几…

excel英语翻译让你的数据更容易被理解

从前有一个名叫小明的办公室职员&#xff0c;他每天都要处理大量的数据和报表。然而&#xff0c;由于工作需要&#xff0c;他经常收到来自不同国家的Excel表格&#xff0c;这些表格上的内容都是用各种各样的语言编写的&#xff0c;让他很难理解其中的意思。这时&#xff0c;小明…

Redis主从复制、哨兵、cluster集群原理+实验

目录 一、Redis 主从复制 1、主从复制的作用 2、主从复制流程 3、搭建Redis 主从复制 安装Redis&#xff08;所有主机) 修改Master节点Redis配置文件 修改Slave节点Redis配置文件 验证主从效果 一、Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&am…

项目中使用过的线程池ThreadPoolTaskExecutor

创建线程池的实例应用 package com.youming.shuiku.datacenter.provider.utils;import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.ThreadPoolExecutor;Slf4j public class AsyncMana…

小研究 - JVM 垃圾回收方式性能研究(三)

本文从几种JVM垃圾回收方式及原理出发&#xff0c;研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响&#xff0c;并通过最终测试数据对比&#xff0c;给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 4 垃圾回收器性能比较 4.1 测试结果 5 结语 …
推荐文章