GCNetworkReachability 1.3.2

GCNetworkReachability 1.3.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未声明的 维护。



  • 作者
  • Glenn Chiu

GCNetworkReachability 用于监控 iOS 和 OS X 设备的网络状态。

该 API 受 Apple 的 iOS Reachability 类的启发,但实现完全从头开始构建,以便利用现代 LLVM 编译器特性和 POSIX 标准。它还与 GCD(libdispatch)并行运行,并支持 OS X 和 IPv6。

特性 / 设计

  • 网络监控是在辅助线程上进行的(通过 libdispatch),因此是全异步的。解析 DNS,在慢速连接上可能需要 30 秒,不会阻塞主线程(也不会调用看门狗定时器)。
  • 支持现代 Clang / LLVM 编译器特性,如 Blocks。
  • 使用 POSIX 套接字 API 而不是 BSD 套接字。
  • 完全支持 iOS 和 OS X。
  • 完全支持 ARC。
  • 支持 IPv4 和 IPv6 地址。

要求

GCNetworkReachability 需要 iOS 5.0 或更高版本或 OS X 10.7 或更高版本。它还需要 Xcode 4.5 或更高版本和 LLVM 编译器 4.1。

安装

将源代码添加到您的项目中。将您的目标链接到 SystemConfiguration.framework

如果您在使用非 ARC 项目的类中使用了此类,请确保为实现文件添加了编译器标志 -fobjc-arc

CocoaPods 支持:pod 'GCNetworkReachability'

用法

推荐方法是使用全局实例变量 GCNetworkReachability,在您的应用程序运行期间保持活动的类中(例如 AppDelegate)。这确保了 GCNetworkReachability 可以持续监控设备网络状态。完毕监控后,始终调用 -stopMonitoringNetworkReachability 以清理内存并停止监控程序。

您是使用块处理程序还是通知 API?通知允许您在整个项目中监听网络状态的变化。如果这不必要,那么应使用处理器,因为它需要更少的代码,更适用于您的应用程序。

块处理器示例

self.reachability = [GCNetworkReachability reachabilityWithHostName:@"www.google.com"];

[self.reachability startMonitoringNetworkReachabilityWithHandler:^(GCNetworkReachabilityStatus status) {

    // this block is called on the main thread   
    switch (status) {
        case GCNetworkReachabilityStatusNotReachable:
            NSLog(@"No connection");
            break;
        case GCNetworkReachabilityStatusWWAN:
        case GCNetworkReachabilityStatusWiFi:
            // e.g. start syncing...
            break;
    }
}];

如果使用通知,您可以通过 NSNotification 块参数访问 GCNetworkReachability 实例。您可以通过 userInfo 字典中的键 kGCNetworkReachabilityStatusKey 访问状态值。

通知示例

[self.reachability startMonitoringNetworkReachabilityWithNotification];

self.observer = [[NSNotificationCenter defaultCenter] addObserverForName:kGCNetworkReachabilityDidChangeNotification
                                                                  object:nil
                                                                   queue:[NSOperationQueue mainQueue]
                                                              usingBlock:^(NSNotification *note) {

                                                                  GCNetworkReachabilityStatus status = [[note userInfo][kGCNetworkReachabilityStatusKey] integerValue];

                                                                  switch (status) {
                                                                      case GCNetworkReachabilityStatusNotReachable:
                                                                          NSLog(@"No connection");
                                                                          break;
                                                                      case GCNetworkReachabilityStatusWWAN:
                                                                          NSLog(@"Reachable via WWAN");
                                                                          break;
                                                                      case GCNetworkReachabilityStatusWiFi:
                                                                          NSLog(@"Reachable via WiFi");
                                                                          break;

                                                                  }
                                                              }];

您不必强制开始监控网络状态,只需检查可达性即可。在需要时,您也可以通过单一代码检查当前网络状态。请注意,您不应为此使用主机名初始化器,因为这需要DNS解析主机名,才能确定该主机的可达性。在某些网络连接上这可能需要花费一些时间。因此,API在完成名称解析之前将返回GCNetworkReachabilityStatusNotReachable

GCNetworkReachability *reachability = [GCNetworkReachability reachabilityForInternetConnection];

if ([reachability isReachable])
{
    // do stuff that requires an internet connection…
}

...

switch ([reachability currentReachabilityStatus]) {
    case GCNetworkReachabilityStatusWWAN:
        // e.g. download smaller file sized images...
        break;
    case GCNetworkReachabilityStatusWiFi:
        // e.g. download default file sized images...
        break;
    default:
        break;
}

检查IP地址可达性

// IPv4 address
GCNetworkReachability *reachability = [GCNetworkReachability reachabilityWithInternetAddressString:@"173.194.43.0"];

// IPv6 address
GCNetworkReachability *reachability = [GCNetworkReachability reachabilityWithIPv6AddressString:@"2a00:1450:4007:801::1013"];

许可证

此代码在MIT许可证的条款和条件下分发。

版权(c)2013 Glenn Chiu

以下许可证已授予任何人,免费获取此软件及其相关文档文件(“软件”)的副本(“软件”),无需限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许将软件提供给获得软件的人员这样做,但受以下条件约束:

上述版权声明和此许可证声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵犯第三方知识产权的保证。在任何情况下,作者或版权持有人不应对任何索赔、损害或其他责任承担责任,无论是由合同行为、侵权行为或其他行为引起的,侵权行为出于、来自或与软件的使用或操作有关。