Что означает "& ошибка" в Objective-C?
Возможный дубликат:
почему здесь используется "ошибка: и ошибка" (цель-с)
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device
error:&error];
Что это &
символ означает в приведенном выше коде?
3 ответа
Это адрес оператора; это производит указатель, указывающий на референт. В этом случае, error
является NSError *
; AVCaptureDeviceInput deviceInputWithDevice:error:
принимает адрес и может изменить error
через этот указатель, чтобы указать на ошибку, которая произошла.
Ошибка - указатель на объект ошибки. &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'
}