繁体   English   中英

目标C中**的语法

[英]Syntax of ** in objective C

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

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

它是一个指向NSError的指针。 它用作“输出参数”-或考虑到NSObject实例始终是指针,您可能想将其视为指向NSError实例的指针。

您可以这样使用它:

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

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

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

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

查阅此博客文章: “使用NSError产生巨大效果”,并特别注意“将指针传递给指针”部分。

另外,关于指针的Wiki页面上有一个有关“多重定向”的部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM