iOS中使用 Reachability 检测网络

如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。

 

写本文的目的

  • 了解Reachability都能做什么
  • 检测3中网络环境
    • 2G/3G
    • wifi
    • 无网络
  • 如何使用通知
    • 单个controller
    • 多个controller
  • 简单的功能:
    • 仅在wifi下使用

Reachability简介

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

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

苹果官方提供的Doc

http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

 

Github上的文档

https://github.com/tonymillion/Reachability

 

安装

  1. 创建 network 工程(network是我创建的demo工程,附件中可以下载到)
  2.  使用Cocoaspod安装依赖
  3. 在项目中添加 SystemConfiguration.framework 库

由于Reachability非常常用。直接将其加入到Supporting Files/networ-Prefix.pch中:

 

#import <Reachability/Reachability.h>

 

 如果你还不知道cocoaspod是什么,看这里:

http://witcheryne.iteye.com/blog/1873221

 

使用

stackoverflow上有一篇回答,很好的解释了reachability的用法

http://stackoverflow.com/questions/11177066/how-to-use-ios-reachability

  • 一般情况一个Reachability实例就ok了。
  • 一个Controller只需要一个Reachability

Block方式使用

 

- (void)viewDidLoad
{
    [super viewDidLoad];
     DLog(@"开启 www.apple.com 的网络检测");
     Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
     DLog(@"-- current status: %@", reach.currentReachabilityString);
    
     // start the notifier which will cause the reachability object to retain itself!
    
     [[NSNotificationCenter defaultCenter] addObserver:self
                                                        selector:@selector(reachabilityChanged:)
                                                             name:kReachabilityChangedNotification
                                                          object:nil];
    
     reach.reachableBlock = ^(Reachability * reachability)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.blockLabel.text = @"网络可用";
               self.blockLabel.backgroundColor = [UIColor greenColor];
        });
    };
   
    reach.unreachableBlock = ^(Reachability * reachability)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.blockLabel.text = @"网络不可用";
               self.blockLabel.backgroundColor = [UIColor redColor];
        });
    };
    
     [reach startNotifier];
}
 

 

 

使用notification的方式

 

- (void)viewDidLoad
{
    [super viewDidLoad];
     DLog(@"开启 www.apple.com 的网络检测");
     Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
     DLog(@"-- current status: %@", reach.currentReachabilityString);
    
     // start the notifier which will cause the reachability object to retain itself!
    
     [[NSNotificationCenter defaultCenter] addObserver:self
                                                        selector:@selector(reachabilityChanged:)
                                                             name:kReachabilityChangedNotification
                                                          object:nil];
     [reach startNotifier];
}

- (void) reachabilityChanged: (NSNotification*)note {
     Reachability * reach = [note object];
   
    if(![reach isReachable])
    {
        self.notificationLabel.text = @"网络不可用";
          self.notificationLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          return;
    }
       
     self.notificationLabel.text = @"网络可用";
     self.notificationLabel.backgroundColor = [UIColor greenColor];
    
     if (reach.isReachableViaWiFi) {
          self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wifiOnlyLabel.text = @"当前通过wifi连接";
     } else {
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.text = @"wifi未开启,不能用";
     }
    
     if (reach.isReachableViaWWAN) {
          self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wwanOnlyLabel.text = @"当前通过2g or 3g连接";
     } else {
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.text = @"2g or 3g网络未使用";
     }
}

 

 

附件demo说明

开启wifi状态


 关闭wifi的状态


 

 

 

遗留问题

  1. 如何在多个controller之前共用一个Reachability(附件demo中是一个controller一个Reachability实例)
  2. 应该在什么使用停止Reachability的检测.

 

 

 

UVM验证中,为什么我的pack_bytes()返回长度是0?手把手教你排查自定义do_pack函数 本文深入解析UVM验证中pack_bytes()返回长度为0的常见原因及系统排查方法。从UVM打包机制原理出发,详细列举了super.do_pack()缺失、field automation冲突等典型问题,并提供动态数组处理、位宽计算等进阶调试技巧,帮助开发者快速定位和解决自定义do_pack函数问题。 阅读详情

相关推荐

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现

本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。

weixin_29238147的博客 314

IOS网络——检测网络状态:Reachability,iosreachability

1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用。大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作。 2.在你的应用尝试通过网络获取数据之前,你需要知道当前设备是否知道连接上了网络,甚至有时候你可能还需要知道当前网路是由wifi还是由移动蜂窝网络提供的。 3.“在网络访问失败的时候,应用没有做出适当的提示”是...

diaoguan9600的博客 170

【StarRocks】-- DATETIME 与 TIMESTAMP 区别详解

本文详细解析了StarRocks中DATETIME/DATETIMEV2与TIMESTAMP的区别及使用场景。DATETIME系列存储人类可读时间,不携带时区;TIMESTAMP实际指Unix时间戳,建议用BIGINT存储。关键差异包括:精度选择(DATETIMEV2支持微秒级)、时区处理(仅函数计算时影响)、存储方式等。针对不同场景提供选型建议:单时区展示用DATETIMEV2,跨时区计算用BIGINT存储Epoch。特别强调与MySQL迁移时的注意事项,并给出常见问题解决方案和最佳实践清单,包括统一入口

欢迎来到我的博客,一起探索代码里的世界! 496

ios 开发之使用Reachability检测网络状态

一:确认网络环境3G/WIFI     1. 添加源文件和framework      开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。   Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:

游戏爱好者1199 2357

华为OD机考双机位C卷 - 螺旋数字矩阵 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 数字螺旋矩阵(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 3215

在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南

本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1841

iOS Reachability检测网络状态

一、整体介绍 前面已经介绍了网络访问的NSURLSession、NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发。其实在网络开发中还有比较常用的就是网络状态的检测。苹果对需要联网的应用要求很高,就是必须要进行联网检查。另外,当网络发生异常时能够及时提示用户网络已断开,而不是程序问题造成卡顿;当用户观看视频或下载大文件时,提示用户当前...

diaomu2002的博客 151

【OpenCV】第二十三章: 图像特征检测之SURF、FAST、BRIEF、OBR算法

4、由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,如果对每个像素点都进行上述的检测过程,那显然是种浪费,所以FAST采用一种进行非特征点判别的方法:首先对候选点的周围90度的点(1,9,5,13)四个点进行测试,而且是先测试1和9,如果它们两个符合阈值要求再测试5和13。继SIFT和SURF后,大家在特征点检测的速度上又进行了很多的改进尝试,但速度的提升效果都不是非常明显,直到FAST算法诞生,特征点检测的速度才有了一个质的飞跃。无法计算描述符的特征点将被删除。

因为热爱所以坚持 2158

【iOS】使用 Reachability 第三方库 检测网络

原文链接:http://witcheryne.iteye.com/blog/1879827 如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。   写本文的目的 了解Reachability都能做什么检测3中网络环境 2G/3Gwi

骷髅精灵Coding 479

Android系统内存和性能关系的调研

摘要:本文分析了低内存导致性能问题的判断方法和评估思路。通过监控/proc/vmstat中的allocstall_normal、pageoutrun等指标可判断内存回收频率,当MemFree、MemAvailable和Cached均低于500MB时可能出现明显卡顿。全文通过实验和理论验证分析,回答因内存瓶颈导致性能问题的一些分析和解决的思路。

jidapenglin28的专栏 128

Matlab之App Designer 一键自动生成带有表格的报告

本文采用案例讲解的方式介绍了采用Matlab中的App Designer开发可视化GUI分析界面后,实现一键自动导出带有表格报告的方法和步骤。可以实现从报告编制等繁琐的工作中解脱出来。

m0_59012156的博客 355

IOS网络——检测网络状态:Reachability

IOS网络——检测网络状态:Reachability

博客标题不能为空 5136

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS开发实践之网络检测Reachability

在网络应用开发中,有时需要对用户设备的网络状态进行实时监控,以至于对用户进行友好提示 或者根据不同网络状态处理不一样的逻辑(如视频播放app,根据当前的网络情况自动切换视频清晰度等等)。用Reachability实现网络的检测。    苹果官方提供了Reachability的示例程序,便于开发者检测网络状态   https://developer.apple.com/library/ios/s

zhixinhuacom的专栏 1717

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IOS使用Reachability实时检测网络连接状况

IOS使用Reachability实时检测网络连接状况 //在程序的启动处,开启通知 - (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   //.....   //开启网络状况的监听

MOKA 5662

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 153
上一篇: 使用cocoapods安装objective c程序依赖
下一篇: iOS开发中使用FMDB解决数据存储问题
lvjian700
博客等级 码龄15年 14粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值