我知道这似乎是一个非常基本的问题,但我一直认为解释(和理解)基本问题是构建干净且有效的代码的关键。我在 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 中运行“分析”,我在创建错误时得到了著名的“潜在的 null 取消引用”。虽然编译器没有发出任何警报,但代码一直有效。这也可能是一个问题,为什么编译器没有警告我?
但是谈到代码,我完全知道解决方案,即检查是否(错误!= nil),但我对此很迷茫。问题从头开始,在 NSError *_autoreleasing* 的含义上,为什么是周围的星号?哪个应该是指向指针的指针?
假设我想自己调用 validateForInsert:,如何构建 *_autoreleasing* 对象?
我想以下问题与上述问题有关:如果我从头开始构建 *error,为什么我要先检查是否为 nil ?
最后但并非最不重要的一点是,代码运行良好,错误被拦截,你能找出一个可能导致它失败或崩溃的案例吗?正如我所说,我正在使用 CoreData,一个通用的例子会很好,但另一个与 CoreData 相关的例子值得赞赏。
谢谢