зачем использовать двойной указатель, когда один указатель может выполнять работу в Objective-C? - PullRequest
1 голос
/ 06 мая 2019

Я понимаю преимущество использования указателя, но двойной указатель - это то, чего я действительно не понимаю. Мне сказали, что двойной указатель используется, когда вы хотите, чтобы метод изменил значение передаваемого вами параметра. Учитывая приведенный ниже пример, 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;
}

1 Ответ

1 голос
/ 06 мая 2019

Нет необходимости в двойном указателе с скаляром (int).Очевидно, что все, что вам нужно, это указатель.

Но объект уже является указателем.Таким образом, чтобы сделать то же самое с объектом, вам нужен двойной указатель.Типичный вариант использования NSError**:

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