1

简单的问题。下面界面中的双星号是什么意思?它不是一个 NSError 指针,但是什么?

- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
4

3 回答 3

7

它是一个指向NSError. 它被用作“输出参数”——或者您可能想将其视为指向NSError实例的指针,因为NSObject实例始终是指针。

你像这样使用它:

NSError * outError = nil; << reserve place and a name for the out parameter

// pass the error so the client may return it to you:
BOOL ret  = [obj checkResourceIsReachableAndReturnError:&outError]; 

if (nil != outError) { << the error was set in checkResourceIsReachableAndReturnError:
  NSLog(@"Error: %@", outError); << log it
}
…

在实现方面,它看起来像这样:

- (BOOL)checkResourceIsReachableAndReturnError:(NSError**)outError
{
  if (self.isThingReachable) {
    // okay - the caller may not be interested in the error, test it:
    if (0 != outError) {
      // they are interested this time!
      *outError = [NSError errorWithBlahBlahBlah];
    }
    return NO;
  }

  return YES;
}
于 2012-02-12T00:21:45.210 回答
1

您可以通过发送对 的引用来调用它NSError*,如下所示:

NSError *myError = NULL;
[foo checkResourceIsReachableAndReturnError:&myError];
if (myError) {
    /* look through info, handle error, etc. */
}

-checkResourceIsReachableAndReturnError:方法可以修改指针myError,包括为新的分配空间NSErrormyError这使您可以通过简单地检查是否为非来轻松检查是否存在错误NULL

于 2012-02-12T00:22:22.197 回答
1

查看这篇博文:“使用 NSError 产生巨大影响”,并特别注意“将指针传递给指针”部分。

此外,关于指针的 wiki 页面有一个关于“多重间接”的部分

于 2012-02-12T00:27:57.403 回答