4

可能重复:
为什么这里使用“error:&error”(objective-c)

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

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

4

3 回答 3

4

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

于 2012-10-25T04:10:57.563 回答
3

& 符号用于传递前缀变量的地址。它也称为按引用传递,而不是按值传递。所以 &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'
    }
于 2012-10-25T04:38:19.097 回答
1

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

于 2012-10-25T04:04:46.760 回答