Objective&C中“&error”的含义是什么?

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

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

&符号在上面的代码中意味着什么?

它是运营商的地址; 它产生一个指向指示物的指针。 在这种情况下, errorNSError * ; AVCaptureDeviceInput deviceInputWithDevice:error:获取一个地址,并可能通过该指针修改error以指示发生的错误。

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

&符号用于传递带前缀的变量的地址。 它也被称为pass by reference而不是pass by value。 所以&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' }