A、说明
在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:
(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
  WIFI\3G网络:自动下载高清图片
  低速网络:只下载缩略图
  没有网络:只显示离线的缓存数据
 
苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
 
注意:此功能只能用真机测试,iOS模拟器,一直都有wifi信号,即使关掉或者使用飞行模式.
 
B、监测网络状态
Reachability的使用步骤
添加框架SystemConfiguration.framework
包含头文件
#import "Reachability.h"

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 检测wifi状态
Reachability *wifiStatus = [Reachability reachabilityForLocalWiFi]; // 检测手机网络状态
Reachability *netStatus = [Reachability reachabilityForInternetConnection]; // 判断网络状态
if ([wifiStatus currentReachabilityStatus] != NotReachable) {
NSLog(@"正在使用wifi上网");
} else if ([netStatus currentReachabilityStatus] != NotReachable) {
NSLog(@"正在使用手机网络上网");
} else {
NSLog(@"没有网络");
}
}
 
C.实时监测网络状态
使用通知监控
网络状态类要发送通知给控制器
销毁控制器的时候一定要删除通知、停止发送消息
 
 //
// ViewController.m
// ReachabilityDemo
//
// Created by hellovoidworld on 15/1/28.
// Copyright (c) 2015年 hellovoidworld. All rights reserved.
// #import "ViewController.h"
#import "Reachability.h" @interface ViewController () @property(nonatomic, strong) Reachability *networkStatus; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 实时监控手机联网状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectNetworkStatus) name:kReachabilityChangedNotification object:nil]; // 开启通知发送
self.networkStatus = [Reachability reachabilityForInternetConnection];
[self.networkStatus startNotifier];
} - (void)dealloc {
// 停止发送通知
[self.networkStatus stopNotifier]; // 切记要删除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
} // 用WIFI
// [wifi currentReachabilityStatus] != NotReachable
// [conn currentReachabilityStatus] != NotReachable // 没有用WIFI, 只用了手机网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] != NotReachable // 没有网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] == NotReachable - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self detectNetworkStatus];
} - (void) detectNetworkStatus {
// 检测wifi状态
Reachability *wifiStatus = [Reachability reachabilityForLocalWiFi]; // 检测手机网络状态
Reachability *netStatus = [Reachability reachabilityForInternetConnection]; // 判断网络状态
if ([wifiStatus currentReachabilityStatus] != NotReachable) {
NSLog(@"正在使用wifi上网");
} else if ([netStatus currentReachabilityStatus] != NotReachable) {
NSLog(@"正在使用手机网络上网");
} else {
NSLog(@"没有网络");
}
} @end
 

[iOS 多线程 & 网络 - 2.8] - 检测网络状态的更多相关文章

  1. iOS 网络与多线程--1.检测网络链接状态

    通过Reachability库,检测设备的网络连接状况. 使用到的类库:Reachability Reachability库,是一个iOS环境下,检测设备网络状态的库,可以在网络上搜索下载. 使用之前 ...

  2. iOS开发网络篇—Reachability检测网络状态

    前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...

  3. 李洪强iOS开发之使用 Reachability 检测网络

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...

  4. iOS网络4——Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...

  5. 「面向打野编程」iOS多线程:CGD

    「面向打野编程」iOS多线程:CGD 前言 参考网络其他文章而写,渣水平,抛砖引玉. 虽然Concurrent意思为并发,但由于队列的实际效果,以下称为并行队列. 当前iPhone的CPU核心数远小于 ...

  6. iOS开发——网络篇——数据安全(MD5),HTTPS,检测网络状态

    一.数据安全 1.提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一 ...

  7. iOS检测网络连接状态

    官方Demo下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 将Reachab ...

  8. iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  9. iOS 检测网络状态 自动判断 认为提示网络改变

    检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验WIFI\3G ...

随机推荐

  1. 网站常见问题及解决方法(div/css)

    18.<a> 在IE6,7 下面重新定义宽和高的代码:{  display:block; display:-moz-inline-stack; display:inline-block;  ...

  2. iOS开发:Swift多线程NSOperation的使用

    介绍: NSOperation是基于GCD实现,封装了一些更为简单实用的功能,因为GCD的线程生命周期是自动管理,所以NSOperation也是自动管理.NSOperation配合NSOperatio ...

  3. CodeForces Round #279 (Div.2)

    A: 题意: 有三个项目和n个学生,每个学生都擅长其中一个项目,现在要组成三个人的队伍,其中每个人恰好擅长其中一门,问能组成多少支队伍. 分析: 最多能组成的队伍的个数就是擅长项目里的最少学生. #i ...

  4. 关于存储过程 output 问题

    在游标循环当中给 output 变量赋值报 指定的转换无效 错误必须在存储过程最后再给 output 变量赋值

  5. this class is not key value coding-compliant for the key ##

    setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ## 出现以上错误时很恶心,并 ...

  6. eclipse export Android jar with jni

    /*********************************************************************** * eclipse export Android ja ...

  7. sharepoint SPFolder的使用

    转:http://blog.csdn.net/pclzr/article/details/7591731 SPFolder是SharePoint对象模型中文件夹相关的类,它的使用方法相对比较简单.获取 ...

  8. PostgreSQL 8.4.1

    PHP100资讯:PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大.特性最丰富和最复杂的自由软件数据库系统.它起源于伯克利(BSD)的数据库研究计划,目前是最 ...

  9. 头痛的ASCII和preg_replace()

    说这个之前,大家先看下这条语句: preg_replace("/\<\?\=(\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\[\]\"\'\$\x7f- ...

  10. c# Chart设置样式

    一.chart属性熟悉 能够对C# chart控件属性熟悉起帮助的code, 现在分享给大家,Chart Operate Demo Code Download,如有帮助,别忘点个赞. Chart    ...