目标 C(通过引用传递)

Posted

技术标签:

【中文标题】目标 C(通过引用传递)【英文标题】:Objective C (pass by reference) 【发布时间】:2015-06-17 02:19:01 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

不知道如何放大这张图片,但如果你在浏览器中放大就可以看出来【参考方案2】:

这本书谈到指针“成为”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 对象,让您将一个新实例传回给调用者。当一个方法调用可以返回多个对象时,这会变得很方便。

【讨论】:

通常传递错误指针是可选的,所以应该是if (errorCondition && errPtr) ... @Droppy 这是一个包含许多缺失部分的概念说明。我相信 OP 会弄清楚如何处理双指针以使其成为可选的。

以上是关于目标 C(通过引用传递)的主要内容,如果未能解决你的问题,请参考以下文章

C语言有引用传递吗

在c / c ++中何时通过引用传递以及何时通过值传递[重复]

通过引用将字符串数组传递给 C 函数

C 和 C++ 中的“通过引用传递”到底有啥区别?

通过引用c ++传递数组

值传递和引用传递怎么理解?