前言:AFNetworkReachabilityManager基于系统API SystemConfiguration框架
SystemConfiguration框架允许应用程序访问设备的网络配置设置。 确定设备的可连接性,例如Wi-Fi或cell连接是否处于活动状态。接下来几篇我们就一起看一下这个框架。
1.NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE
NS_DESIGNATED_INITIALIZER 用于明确初始化方法, NS_UNAVAILABLE 的作用是,直接禁用其他初始化方法,简单粗暴。
2.FOUNDATION_EXPORT
FOUNDATION_EXPORT是对字符串的指针地址比较; #define是调用isEqualToString 的方法;
3.初始化
+ (instancetype)sharedManager; 单例
+ (instancetype)managerForDomain:(NSString*)domain; 用SCNetworkReachabilityRef 初始化 SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]);
+ (instancetype)managerForAddress:(constvoid*)address; //socketaddress初始化 SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address);
+ (instancetype)manager; 总的来说也是用socketaddress初始化
- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability; 用reachability 初始化
3.追踪
- (void)startMonitoring; 每次开始追踪时都要停止追踪
主要代码
// 通过调用 SCNetworkReachabilityScheduleWithRunLoop 函数设置 Reachability 对象的 ref 在 Current Runloop 中对应的模式(kCFRunLoopDefaultMode)开始监听网络状态;
SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
GCD进程锁 开启通知 AFNetworkingReachabilityDidChangeNotification
4.停止追踪
SCNetworkReachabilityUnscheduleFromRunLoop方法
主要代码
SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);