Ios 如何解释从SCNetworkReachabilityCreateWithName返回的null?

Ios 如何解释从SCNetworkReachabilityCreateWithName返回的null?,ios,reachability,Ios,Reachability,我们的代码中有一个方法,它使用SCNetworkReachabilityCreateWithName返回SCNetworkReachabilityRef: - (SCNetworkReachabilityRef)cCreateReachabilityRefWithCStr:(const char *)host { return SCNetworkReachabilityCreateWithName(NULL, host); } 有时,我们会为可达性引用返回NULL。空返回是什么意思 A

我们的代码中有一个方法,它使用
SCNetworkReachabilityCreateWithName
返回
SCNetworkReachabilityRef

- (SCNetworkReachabilityRef)cCreateReachabilityRefWithCStr:(const char *)host {
    return SCNetworkReachabilityCreateWithName(NULL, host);
}
有时,我们会为可达性引用返回NULL。空返回是什么意思

Apple文档没有讨论这些方法的空返回。但是,
SCNetworkReachabilityCreateWithName
中的Classes/Reachability.m文件说明了一个事实,即
SCNetworkReachabilityCreateWithName
可以返回NULL,但没有说明原因


那么空返回意味着什么,我该如何处理呢?

在回答iOS开发者论坛上的类似查询时(链接仅限iOS开发者计划成员访问),苹果开发者支持部的一位人士指出,据他所知,
SCNetworkReachabilityCreateWithName
可能返回NULL的原因只有三个:

  • 节点名为NULL(
    kSCStatusInvalidArgument
  • 节点名为空(
    kSCStatusInvalidArgument
    );或
  • 内存分配问题(未设置
    kSCStatusXxx
  • 他还指出,可达性API在Darwin中,Darwin的实现与OSX和iOS上的实现非常接近。代码似乎证实了他的观点,即上述三个原因是
    SCNetworkReachabilityCreateWithName
    返回NULL的唯一方式

    我还了解到,包含有关检测和解释调用
    SCxxx
    函数生成的错误的信息,特别是
    SCError()
    SCErrorString()
    之类的内容

    我通过将“”和NULL作为名称传递,故意从
    SCNetworkReachabilityCreateWithName
    返回空值,然后尝试
    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
    
    这解释了从达尔文代码的三个案例中有两个返回NULL

    还有一种方法可以使用
    SCCopyLastError()
    获取
    CFErrorRef
    ,它实际上可能包含更多信息。除上述系统配置参考外,请参阅


    考虑到所有这些,我想说前两种情况是无法重试的,因为传递一个空的或零长度的主机名是一个程序逻辑错误。第三个与内存相关的案例可能可以重试。

    针对iOS开发者论坛上的类似查询(链接仅限iOS开发者程序成员访问),苹果开发者支持部的一位人士指出,据他所知,
    SCNetworkReachabilityCreateWithName
    可能返回NULL的原因只有三个:

  • 节点名为NULL(
    kSCStatusInvalidArgument
  • 节点名为空(
    kSCStatusInvalidArgument
    );或
  • 内存分配问题(未设置
    kSCStatusXxx
  • 他还指出,可达性API在Darwin中,Darwin的实现与OSX和iOS上的实现非常接近。代码似乎证实了他的观点,即上述三个原因是
    SCNetworkReachabilityCreateWithName
    返回NULL的唯一方式

    我还了解到,包含有关检测和解释调用
    SCxxx
    函数生成的错误的信息,特别是
    SCError()
    SCErrorString()
    之类的内容

    我通过将“”和NULL作为名称传递,故意从
    SCNetworkReachabilityCreateWithName
    返回空值,然后尝试
    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
    
    这解释了从达尔文代码的三个案例中有两个返回NULL

    还有一种方法可以使用
    SCCopyLastError()
    获取
    CFErrorRef
    ,它实际上可能包含更多信息。除上述系统配置参考外,请参阅

    考虑到所有这些,我想说前两种情况是无法重试的,因为传递一个空的或零长度的主机名是一个程序逻辑错误。第三个与内存相关的案例可能可以重试