Objective c 理解';潜在零解引用';在处理N错误时

Objective c 理解';潜在零解引用';在处理N错误时,objective-c,nserror,Objective C,Nserror,我知道这似乎是一个非常基本的问题,但我一直认为解释(和理解)基本问题是构建干净和有效代码的关键。 我在CoreData实体中有以下代码片段: -(BOOL)validateForInsert:(NSError *__autoreleasing *)error { [super validateForInsert:error]; return [self validateInternal:error]; } -(BOOL)validateInternal:(NSError *__

我知道这似乎是一个非常基本的问题,但我一直认为解释(和理解)基本问题是构建干净和有效代码的关键。 我在CoreData实体中有以下代码片段:

-(BOOL)validateForInsert:(NSError *__autoreleasing *)error {
    [super validateForInsert:error];
    return [self validateInternal:error];
}

-(BOOL)validateInternal:(NSError *__autoreleasing *)error {
  // checking attributes and build userInfo error
  if(anyErrors) {
    *error = [NSError errorWithDomain:appDomain code:200 userInfo:details];
    return NO;
  }
  return YES;
}
通过在Xcode中运行“analyze”,我在创建错误时获得了著名的“潜在空解引用”。虽然编译器没有发出任何警报,但代码始终有效。 这可能也是一个问题,为什么编译器不警告我

但是说到代码,我完全知道解决方案,那就是检查(error!=nil),但是我对此非常困惑。 问题从一开始就开始了,在N错误*的意思上,为什么是周围的恒星?哪一个应该是指向指针的指针

假设我想调用validateForInsert:我自己,如何构建一个*u autoreleasing*对象

我想下面的问题与上面的问题有关:如果我从头开始构建*错误,为什么我要先检查nil

最后但并非最不重要的一点是,代码工作正常,错误被截获,您能否发现一个可能导致代码失败或崩溃的情况?正如我所说的,我正在使用CoreData,一个通用的例子就可以了,但是另一个与CoreData相关的例子是值得赞赏的

谢谢

语法正确,因此编译器不会发出警告。如果
error=NULL
,即如果您调用

[myObj validateForInsert:NULL];
如果你打电话

NSError *error;
[myObj validateForInsert:&error];
然后传递
error
的地址,因此传递类型为
NSError**
的变量

\uu自动删除
修饰符向ARC编译器提示,指定给
error
的对象是自动删除的对象

您可以声明要自动释放的变量

NSError * __autoreleasing error;
[myObj validateForInsert:&error];
但通常你不在乎。ARC只生成正确的代码


有关详细信息,请阅读。关于stackoverflow这个话题,也有很多答案。

我完全不理解自动释放的含义,我把它看作一个变量名!!谢谢你的解释,对我来说,这就足够了。
NSError * __autoreleasing error;
[myObj validateForInsert:&error];