*
обозначает, что вы используете указатель на переменную и чаще всего используется для хранения ссылки на объект Objective-C, объекты, которые могут жить только в куче, а не в стеке.
Указатели не являются частью не только Objective-C, но скорее особенностью C (и, следовательно, его производных языков, одним из которых является Objective-C).
Если вы сомневаетесь в разнице между *
и **
, первая обозначает указатель, а вторая обозначает указатель на указатель; преимущество последнего перед первым заключается в том, что при передаче объекта с использованием **
в параметре метода метод может затем изменить этот параметр, и новое значение будет доступно в вызывающем методе.
Пожалуй, наиболее распространенное использование **
в Какао - это использование NSError
объектов. Когда вызывается метод, который может вернуть объект NSError
при сбое, сигнатура метода будет выглядеть примерно так:
- (id)someMethodThatUsesObject:(id)object error:(NSError**)error;
Это означает, что вызывающая функция может передавать указатель на объект NSError
, но someMethodThatUsesObject:
может изменить значение error
на другой объект NSError
, если это необходимо, что затем может быть доступ к вызывающему методу.
Это часто используется как обходной путь для факта, что функции могут возвращать только одно значение.