AFNetworking (3.1.0) 源码解析 <三>
今天要介绍的是Reachability文件夹下的AFNetworkReachabilityManager类。通过字面意思我们就可以知道AFNetworkReachabilityManager
是用来监测网络状态,网络状态管理的类,他可以通过设置状态改变回调来获得当前网络状态。
下面我们还是先看.h文件。
上边枚举表示的是网络状态,网络状态有以上几种,分别是未知,不可用,无线广域网连接,WiFi连接。
以上是包含的属性
networkReachabilityStatus当前网络的状态,就是枚举中的类型
reachable网络是不是当前可用的
reachableViaWWAN通过WWAN连接的网络是不是当前可用的
reachableViaWiFi通过WIFI连接的网络是不是当前可用的
下面是初始化方法
这个是单例,通过dispatch_once_t保证只执行一次,单线程。
在上边单例里调用这个方法,manager方法中通过默认的socket地址创建并返回一个网络状态管理对象。sin_family表示协议族,AF_INET表示TCP/IP协议族的地址,sockaddr_in是一个结构体,bzero是将结构体清零,sin_len表示的是大小,根据版本的不同给地址赋不同的值。
下面调用的是managerForAddress方法.
在这个方法里,通过传入一个socket地址进行初始化。生成SCNetworkReachabilityRef,然后调用initWithReachability方法,最终返回manager对象。下面是initWithReachability方法
在这里将网络状态初始化设置为 unknown 未知 。
- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;
由于在声明的时候有NS_DESIGNATED_INITIALIZER,所以最终都会调用该方法。
还有最后一种方法是managerForDomain
该方法可以根据特定的域进行初始化。初始化结束后,需要设置网络状态改变的回调,在开启监听之后,会将网络状态回调给外部。
初始化相关方法介绍之后,介绍一下监听相关方法
开启监听方法
先是停止监听,然后在block中将status回调出去,声明一个结构体,设置回调,通过runloop监测网络状态,最后获取当前的网络状态,调用callback.
如果没有设置回调,可以通过以上注册通知的方式,接收到网络状态的变化。获取当前的status,然后返回status,同时发送一个通知。
下面就是停止监听方法
停止监听就是取消在Main Runloop当中的监听。
当我们在使用的这个类进行网络状态监听的时候使用方法,举例
AFNetworkReachabilityManager *networkManager = [AFNetworkReachabilityManager sharedManager]; [networkManager startMonitoring]; [networkManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status){ case AFNetworkReachabilityStatusNotReachable: // do something break; case AFNetworkReachabilityStatusReachableViaWWAN: // do something break; case AFNetworkReachabilityStatusReachableViaWiFi: // do something break; default: break; } }]; |
如有转载,请注明出处。
参考文章:http://zeeyang.com/2016/05/23/AFNetWorking-four/
AFNetworking (3.1.0) 源码解析 <三>的更多相关文章
- AFNetworking2.0源码解析<三>
本篇说说安全相关的AFSecurityPolicy模块,AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程 ...
- AFNetworking (3.1.0) 源码解析 <六>
这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerializ ...
- AFNetworking (3.1.0) 源码解析 <五>
这次主要开始讲解一下文件夹Serialization下的类AFURLRequestSerialization. AFURLRequestSerialization类遵守`AFURLRequestSer ...
- AFNetworking (3.1.0) 源码解析 <一>
首先说一下AFNetworking的github地址:GitHub - AFNetworking/AFNetworking: A delightful networking framework for ...
- AFNetworking (3.1.0) 源码解析 <四>
这次主要看一下文件夹Security中的类AFSecurityPolicy----安全策略类. AFSecurityPolicy主要的作用是验证HTTPS请求证书的有效性,在iOS9之后,默认不能发送 ...
- AFNetworking (3.1.0) 源码解析 <二>
这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请 ...
- solr&lucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Heritrix 3.1.0 源码解析(三十七)
今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的 ...
- solr&lucene3.6.0源码解析(四)
本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...
随机推荐
- HDU5327
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; int ...
- Electron
跨平台桌面app开发 Appjs hex nwjs electron 官网:http://electron.atom.io/ 中文文档:https://github.com/atom/electron ...
- DEDECMS批量修改默认文章和列表命名规则的方法
很多人因为添加分类而苦恼,尤其是批量添加的时候,必须要重新修改一下文章命名规则和列表命名规则,都是为了做SEO.如果进行默认值的修改,就会事半功倍.不多说. 一.DEDE5.5修改默认文章命名规则. ...
- (转)Call to undefined function mb_convert_encoding()
需要先enable mbstring 扩展库 在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉mb_convert_encoding 可以指定多种输入编 ...
- Design Pattern —— Singleton
Design Pattern —— Singleton 强力推荐枚举和类级内部类方式实现单例模式 单例模式是开发中非常常用的一种模式,简单的说,我们希望一个类永远都只有一个对象. 主要有两个用途: ...
- 使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
如果是同一个静态库中的文件链接的时候有冲突,可能是这个静态库不支持模拟器,真机运行就好了. 或者可以使用xcode7的虚拟机跑也是没问题的. duplicate symbol _llvm.cmdlin ...
- CSS 布局Float 【3】
float 属性定义元素在哪个方向浮动. 浮动元素会生成一个块级框,而不论它本身是何种元素. 如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 注释:假如在一行之上只有极少的空间可 ...
- Linux服务器指令
1.查看cpu信息:/proc/cpuinfo2.查看内存信息:/prco/meminfo3.查看服务器版本信息:cat /etc/issue4.服务器系统位数:uname -a5.网卡信息:ifco ...
- [LeetCode OJ] Candy
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- 【USACO 1.2.5】双重回文数
[题目描述] 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事 ...