测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可协议 | MIT |
发布上次发布 | 2015年5月 |
由 James Billingham、Karl Stenerud 维护。
作者:Karl Stenerud
很久以前,在一个遥远的Xcode里,苹果提供了“Reachability”,一个示例Objective-C包装器,用于演示SystemConfiguration Reachability API。总的来说,它运行得很好,但还可以更好!
KSReachability 将可达性提升到了新的水平。
#import "KSReachability.h"
self.reachability = [KSReachability reachabilityToHost:hostname];
self.reachability.onReachabilityChanged = ^(KSReachability* reachability)
{
NSLog(@"Reachability changed to %d (blocks)", reachability.reachable);
};
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onReachabilityChanged:)
name:kDefaultNetworkReachabilityChangedNotification
object:nil];
...
self.reachability.notificationName = kDefaultNetworkReachabilityChangedNotification;
...
- (void) onReachabilityChanged:(NSNotification*) notification
{
KSReachability* reachability = (KSReachability*)notification.object;
NSLog(@"Reachability changed to %d (NSNotification)", reachability.reachable);
}
[self.reachability addObserver:self
forKeyPath:@"reachable"
options:NSKeyValueObservingOptionNew
context:NULL];
...
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
KSReachability* reachability = (KSReachability*)object;
NSLog(@"Reachability changed to %d (KVO)", reachability.reachable);
}
// Create a one-shot operation that gets fired once the host is reachable.
self.reachableOperation = [KSReachableOperation operationWithHost:hostname
allowWWAN:NO
onReachabilityAchieved:^
{
[self showAlertWithTitle:@"One-time message"
message:@"Host is reachable!"];
}];
根据苹果的SCNetworkReachability文档,当数据包地址为该远程主机时,被认为是可以到达的,只要该数据包可以离开本地设备(即理论上可以到达主机)。它并不能保证数据实际上会被接收或主机会对连接请求做出响应!例如,如果主机有一个DNS记录,但主机自身已经关闭,它仍然被认为是可到达的。
KSReachability必须进行DNS查询以确定通过名称访问主机是否可达。由于这种查询在某些极端情况下可能需要10秒以上,因此它在后台执行。因此,新创建的KSReachability对象在没有完成此查询之前,其状态始终设置为不可达。如果您需要主机真实可达性,必须等待“initialized”属性变为YES(它支持KVO)。作为替代,您可以设置回调“onInitializationComplete”。
我已经在这个仓库中包含了一个完整的项目示例。
在
在MacReachability中,请参阅AppDelegate.h和AppDelegate.m以获取详细信息。
版权所有 (C) 2012 Karl Stenerud。保留所有权利。
特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许提供软件的人员为此目的使用软件,前提是遵守以下条件:
上述版权声明和许可声明应保留在源代码中。
软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的还是特定的,包括但不限于适销性、适用于特定目的和不侵犯权利的保证。在任何情况下,作者或版权持有者不对任何索赔、损害或其他责任承担责任,无论是否由于违反合同、侵权或其他方式引起的,无论是否与软件相关或与使用软件相关或与软件的使用或其他交易相关。