目标C(通过引用传递)

时间:2015-06-17 02:19:02

标签: objective-c nserror

我正在学习如何传递NSError指针和本书谈论指针" 成为" NSError的一个实例。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

的调用者

enter image description here

答案 1 :(得分:3)

  这本书讲的是指针"成为" NSError的实例。

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

-(void)checkError:(NSError**)errPtr {
    if (errorCondition) {
        *errPtr = [NSError errorWithDomain:... code:... userInfo:...];
    }
}

errorCondition为真时进行此次通话后,

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

error将引用新创建的NSError对象,允许您将新实例传递回调用方。当从方法调用返回多个对象时,这会变得很方便。