Objective-C 中的“&error”是啥意思? [复制]

Posted

技术标签:

【中文标题】Objective-C 中的“&error”是啥意思? [复制]【英文标题】:What does "&error" mean in Objective-C? [duplicate]Objective-C 中的“&error”是什么意思? [复制] 【发布时间】:2012-10-25 04:01:31 【问题描述】:

可能重复:why is “error:&error” used here (objective-c)

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device
                                                                    error:&error];

上面代码中的&符号是什么意思?

【问题讨论】:

我建议看看这些问题why-is-errorerror-used-here-objective-c 和why-passing-error-instead-of-error-in-cocoa-programming C Guide--1.4.1 Pointers and the Address Operator 【参考方案1】:

error 是一个指向错误对象的指针。 &error 是一个指向错误对象的指针。如果你将一个指向错误指针的指针传递给方法,然后发生错误,则该方法可以分配一个错误对象并将错误指针设置为指向它。

【讨论】:

【参考方案2】:

& 符号用于传递前缀变量的地址。它也称为按引用传递,而不是按值传递。所以 &error 表示错误的地址。 由于error被定义为一个指针,那么&error就是指向error实际存储的指针的地址。

你调用的方法可能将参数定义为**error,从而迫使你将指针传递给指针,或者引用指针。

如果一个方法使用*error作为参数,该方法可以改变参数所指向的值。当方法返回控制权时,调用者可以引用此值。但是,当该方法使用**error作为参数时,该方法也可以改变指针本身,使其指向另一个位置。这意味着调用者的错误变量将因此包含一个新指针。

这是一个例子

    -(void)changePointerOfString:(NSString **)strVal 
        *strVal = @"New Value";
    

    -(void)caller 
        NSString *myStr = @"Old Value";      // myStr has value 'Old Value'
        [self changePointerOfString:&myStr]; // myStr has value 'New Value'
    

【讨论】:

【参考方案3】:

是地址操作符;它产生一个指向所指对象的指针。在这种情况下,error 是一个NSError *AVCaptureDeviceInput deviceInputWithDevice:error: 获取一个地址,并可以通过该指针修改error 以指示发生的错误。

【讨论】:

以上是关于Objective-C 中的“&error”是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 中错误(NSError)构造的解释(使用未声明的标识符“错误”)

Objective-C 正确复制一个 NSArray?

Objective-C中的Hello World

Objective-C中的@property和@synthesize用法

Objective-C中的方法重载?

Objective-C中的SEL (转载)