我正在学习如何传递NSError
指针和本书谈论指针" 成为" NSError
的一个实例。
我没有计算机科学的背景,但这似乎是错误的。
指针是否成为对象,还是指向实例化时发生的未来内存分配? 对象是否被初始化并且指针保留在内存中的位置?
最后,当一个对象在NSError
的上下文中实例化并且我传递给方法的指针时,会发生什么具体的事情?
答案 0 :(得分:4)
我做了一个图表,希望能解释发生了什么。左侧的框显示了代码运行时程序变量包含的内容。右侧显示应用程序的伪代码。您可以看到NSError引用如何返回给-doSomething:
...
答案 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
对象,允许您将新实例传递回调用方。当从方法调用返回多个对象时,这会变得很方便。