Tôi nhận ra rằng điều này tương tự như một bài đăng hiện có ở đây, What's the Point of (NSError**)error?, nhưng câu hỏi của tôi hơi khác một chút. Tôi hiểu cách con trỏ kép hoạt động và cách thức này là mẫu lỗi API iOS phổ biến. Câu hỏi của tôi là hơn xung quanh con trỏ duy nhất, và tại sao mã này không hoạt động:NSError * vs NSError **
- (BOOL)someMethodWithError:(NSError *)error
{
...
if(errorOccured)
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}
return YES;
}
thực hiện sử dụng:
NSError *error = nil;
if(![someObj someMethodWithError:error])
{
NSLog(@"Error: %@", [error localizedDescription]);
}
Tại sao không phải là nhiệm vụ trong việc thực hiện phương pháp phân công lại con trỏ đến đối tượng NSError mới?
Giải thích tuyệt vời madmik. Cảm ơn bạn. Nó hoàn toàn có ý nghĩa bây giờ nhận ra rằng con trỏ được truyền theo giá trị. – Eric
@ madmik3: Có thể nguy hiểm khi nghĩ đến con trỏ là "chỉ số nguyên".Một con trỏ là một biến chứa một địa chỉ. Chỉ vì C cho phép bạn sử dụng các phép toán số học như '++' trên con trỏ không có nghĩa là con trỏ sẽ hoạt động giống như số nguyên. Ví dụ, nếu bạn '++' một biến kiểu 'int' bạn sẽ thêm 1 vào giá trị của nó. Tuy nhiên, nếu bạn '++' một biến kiểu 'int *' * bạn sẽ thêm 4 vào giá trị của nó *. – pje
Tôi không cho rằng bạn coi chúng giống nhau, nhưng nếu bạn nhìn vào cách chúng phản ứng với các biến đi qua thì nó sẽ trở nên rõ ràng tại sao đôi khi bạn cần một con trỏ kép. Nó chỉ là ví dụ. :) – madmik3