单指针可以在 Objective-C 中完成工作时为什么要使用双指针?

why use double pointer when single pointer can do the work in Objective-C?

我明白使用指针的好处,但我真的不明白双指针。有人告诉我,当您希望该方法修改您传入的参数的值时,会使用双指针。在下面的示例中,5 将打印在日志中。那为什么我们要在void changeInt(int **i)中使用双指针呢?

int main (int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    int *a = 1;

    changeInt(&a);
    NSLog(@"%i", a);
    [pool drain];
    return 0;
}

void changeInt(int *i)
{
    *i = 5;
}

不需要带有标量 (int) 的双指针。显然你只需要一个指针。

但是对象已经一个指针。所以要对一个对象做同样的事情,你需要一个双指针。典型的用例是 NSError**:

+ (id)stringWithContentsOfFile:(NSString *)path
                      encoding:(NSStringEncoding)enc
                         error:(NSError **)error