Objective-C通过引用传递vs传递指针.有什么不同?为什么我们需要它呢?

Mai*_*r00 3 objective-c parameter-passing ios

在Objective-C中,我看到了两种将对象传递给函数的常见模式.基本上所有函数的对象都通过引用传递,如下所示: -(void) someFunc:(UIImage*)image;这是通过引用传递的,不是吗?

那么这是什么: -(void) someFunc2:(UIImage**)image?? 是否也通过参考传递?或者通过指针传递指针?或者是什么?我不明白什么是实际差异(但我看了很多代码).主要问题是:为什么我们需要这个指针传递指针:-(void) someFunc2:(UIImage**)image?谢谢.

Lan*_*nce 8

传递双指针允许函数交换您传入的对象.一个很好的例子是所有传递双指针到NSError的Cocoa API.看看这个:

NSError *error = nil;
Result *result = [self someMethodWithPossibleError:&error];
if (![result isValid]) {
    //handle the error
    NSLog(@"Error occurred: %@", error);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们没有传递实际的错误实例,但是因为我们传递了一个指向我们错误的指针,这允许他们在这个方法中创建一个NSError实例,并且在退出之后,我们将指向该新实例.

  • 但不好的例子.您应该*从不*测试`error`以查看方法是通过还是失败.您必须*始终*测试方法的结果,然后仅在方法的返回值指示错误时才考虑`error`.(显然,`someMethodWithPossibleError:`可以使用不同的模式实现,但这将明确针对整个系统中使用的模式). (2认同)