Objective c 目标C(通过参考)

Objective c 目标C(通过参考),objective-c,nserror,Objective C,Nserror,我正在学习传递NSError指针,这本书谈到指针“成为”一个NSError的实例 我没有计算机科学的背景,但这似乎是错误的 指针是成为对象,还是指向实例化时发生的未来内存分配? 对象是否已初始化,指针是否仍保留在内存中 最后,当一个对象在NSError和我传递给该方法的指针的上下文中具体实例化时,会发生什么事情 这本书谈到指针“成为”一个n错误的实例 这是错误的。指针仍然是指针。但是,由于Objective-C中的所有对象都是通过指针引用的,NSError指针由双指针传递,即NSError**:

我正在学习传递
NSError
指针,这本书谈到指针“成为”一个
NSError
的实例

我没有计算机科学的背景,但这似乎是错误的

指针是成为对象,还是指向实例化时发生的未来内存分配?
对象是否已初始化,指针是否仍保留在内存中

最后,当一个对象在
NSError
和我传递给该方法的指针的上下文中具体实例化时,会发生什么事情

这本书谈到指针“成为”一个
n错误的实例

这是错误的。指针仍然是指针。但是,由于Objective-C中的所有对象都是通过指针引用的,
NSError
指针由双指针传递,即
NSError**

-(void)checkError:(NSError**)errPtr {
    if (errorCondition) {
        *errPtr = [NSError errorWithDomain:... code:... userInfo:...];
    }
}
errorCondition
为true时进行此调用后

NSError *error = nil;
[self checkError:&error];

error
将引用新创建的
NSError
对象,允许您将新实例传递回调用方。当一个方法调用可以返回多个对象时,这就很方便了。

我制作了一个图表,希望能解释发生了什么。左边的框显示代码运行时程序变量包含的内容。右侧显示应用程序的伪代码。您可以看到如何将NSError引用返回给
-doSomething:
的调用者


不确定如何将此图像显示得更大,但如果在浏览器中放大,则可以将其放大。通常,传递错误指针是可选的,因此如果(errorCondition&&errPtr){…}
@Droppy,则应该是
这是一个缺少许多片段的概念说明。我相信OP会想出如何处理双指针以使其成为可选的。