我们在代码中使用此方法,使用SCNetworkReachabilityRef
返回SCNetworkReachabilityCreateWithName
:
- (SCNetworkReachabilityRef)cCreateReachabilityRefWithCStr:(const char *)host {
return SCNetworkReachabilityCreateWithName(NULL, host);
}
有时我们为可达性引用返回NULL。 NULL返回是什么意思?
Apple doc SCNetworkReachability Reference不讨论这些方法的NULL返回。但是Reachability sample code中的Classes / Reachability.m文件说明了SCNetworkReachabilityCreateWithName
可以返回NULL但不对其进行评论的事实。
那么NULL返回意味着什么以及我该如何处理呢?
答案 0 :(得分:0)
为了回应iOS开发者论坛What does a NULL return from SCNetworkReachabilityCreateWithName mean?上的类似查询(只有iOS开发者计划成员可以访问链接),Apple Developer Support的某人指出,据他所知,只有三个原因SCNetworkReachabilityCreateWithName
可能返回NULL:
kSCStatusInvalidArgument
); kSCStatusInvalidArgument
);或kSCStatusXxx
)。他还指出,可达性API位于Darwin中,并且Darwin实现与OS X和iOS上的实现接近。代码SCNetworkReachability.c from Darwin似乎证实了他认为上述三个原因是SCNetworkReachabilityCreateWithName
返回NULL的唯一方式。
我还了解到System Configuration Reference包含有关检测和解释通过调用SCxxx
函数生成的错误的信息,特别是SCError()
和SCErrorString()
等内容。
我故意通过传递“”和NULL作为名称从SCNetworkReachabilityCreateWithName
返回NULL,然后尝试SCError
和SCErrorString
(从系统配置参考引用)并且看到我做了一些有意义的额外信息:
reachtest1[9274:11303] isReachableWithName: entry: name: ""
reachtest1[9274:11303] SCNetworkReachabilityCreateWithName returned NULL!
reachtest1[9274:11303] SCError: 1002 SCErrorString: Invalid argument
reachtest1[9274:11303] isReachableWithName: entry: name: (null)
reachtest1[9274:11303] SCNetworkReachabilityCreateWithName returned NULL!
reachtest1[9274:11303] SCError: 1002 SCErrorString: Invalid argument
这解释了从Darwin代码中的三种情况中的两种返回NULL。
还有一种方法可以使CFErrorRef
使用SCCopyLastError()
,其中可能实际上有更多信息。除上述系统配置参考之外,请参阅CFError Reference。
鉴于所有这些,我会说前两种情况不会重试,因为传递NULL或零长度主机名是一个程序逻辑错误。第三个与内存相关的案例可能是可重试的。