Удалить &.Ваша переменная уже является указателем.Я предполагаю, что вы объявили это так: NSMutableArray *listData;
.
Таким образом, использование & передает «указатель на указатель» на функцию, которая ожидает просто указатель на NSMutableArray.
В SDK есть несколько мест, ожидающих NSError **
.И это когда вы используете &, например:
NSError *error = nil;
...
[SomeClass doSomethingReturningError:&error];
if (error != nil) {
//something bad happened
}
Итак, разница здесь в том, что при передаче, в вашем случае, listData
передает объект по значению.Само значение переменной не может быть изменено (но содержимое массива может быть).Другой случай (&error
) передается по ссылке, что означает, что значение переменной, то есть самого указателя, можно изменить.Вот почему вы можете сравнить результат, в этом случае, с нулем, чтобы увидеть, если что-то пошло не так.
Более простой пример - сравнить разницу между следующим:
void changeIntByValue(int i)
{
i++;
}
void changeIntByReference(int &i)
{
i++;
}
int x=2;
changeIntByValue(x);
NSLog(@"%d", x); // prints 2
changeIntByReference(&x);
NSLog(@"%d", x); // prints 3
Passingпо значению не позволяет изменять аргументы, а передача по ссылке -