Objective C 中 ** 的语法

发布于 2025-01-05 09:56:05 字数 140 浏览 1 评论 0原文

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

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

Simple question. What is the meaning of the double asterisk in the interface below? It's not an NSError pointer, but what?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

世界如花海般美丽 2025-01-12 09:56:05

它是一个指向 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;
}

It's a pointer to a pointer to an NSError. It's used as an "out parameter" -- or you may want to think of it as a pointer to an NSError instance, considering an NSObject instance is always a pointer.

You use it like this:

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
}
…

On the implementation side, it looks like this:

- (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;
}
尸血腥色 2025-01-12 09:56:05

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

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

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

You call it by sending a reference to an NSError*, like so:

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

The -checkResourceIsReachableAndReturnError: method can modify the pointer myError, including allocating space for a new NSError. This allows you to easily check if there was an error, by simply checking if myError is non-NULL.

屋顶上的小猫咪 2025-01-12 09:56:05

查看此博客文章:"使用NSError To Great Effect”,并特别注意“将指针传递给指针”部分。

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

Check out this blog post: "Using NSError To Great Effect" and pay particular attention to the section "Passing Pointers to Pointers."

Also the wiki page on pointers has a section on "Multiple Indirection"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文