所以这是来自文档的代码:
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Shared reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
生成此输出:
2014-08-24 19:56:16.522 app[482:60b] Shared reachability: Reachable via WWAN
2014-08-24 19:56:16.525 app[482:60b] Shared reachability: Reachable via WWAN
将其替换为此代码:
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Shared reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
NSURL *baseURL = [NSURL URLWithString:@"http://thisdomaindoesntexistatall.com"];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"http://thisdomaindoesntexistatall.com reachable: %@", AFStringFromNetworkReachabilityStatus(status));
break;
case AFNetworkReachabilityStatusNotReachable:
default:
NSLog(@"http://thisdomaindoesntexistatall.com not reachable: %@", AFStringFromNetworkReachabilityStatus(status));
break;
}
}];
[manager.reachabilityManager startMonitoring];
我得到了这个输出:
2014-08-24 20:00:05.091 app[499:60b] http://thisdomaindoesntexistatall.com reachable: Reachable via WWAN
2014-08-24 20:00:05.092 app[499:60b] http://thisdomaindoesntexistatall.com reachable: Reachable via WWAN
2014-08-24 20:00:05.094 app[499:60b] http://thisdomaindoesntexistatall.com reachable: Reachable via WWAN
2014-08-24 20:00:05.095 app[499:60b] http://thisdomaindoesntexistatall.com reachable: Reachable via WWAN
这导致了两个部分的问题:
1)如果AFHTTPRequestOperationManager似乎用sharedManager替换了它的可达性状态块,那么它的重点是什么?
2)考虑到AFHTTPRequestOperationManager告诉我一个不存在的URL可达,这似乎表明它实际上只监视整体网络访问而不是对特定端点的可用性,这也是令人困惑的。或者它是否可以监控特定URL的可达性(可能表示缺少健康,如果无法访问)?
答案 0 :(得分:0)
最好的办法是look at the source,因为它是一个开源项目。
AFHTTPRequestOperationManager
在可达性之上还有许多其他功能。我猜这个可达性是为了方便起见。
可达性实际上并不关心特定端点是否响应,它只是通知您网络硬件的当前状态:
当数据包发送时,远程主机被认为是可达的 应用程序进入网络堆栈,可以离开本地设备。 可达性不保证数据包实际上是 收到主持人的回复。
这有点违反直觉,直到您考虑到网络的动态性质以及您很可能不想ping服务的事实(即想想成千上万的iOS应用程序ping你的网络服务不必要),即使你这样做也不能保证任何事情。