Objective-c символы ** & + - - PullRequest
       26

Objective-c символы ** & + -

7 голосов
/ 30 августа 2011

Как раз когда я думаю, что мне становится комфортно с Objective-c, упомянутые символы полностью бросают меня в кроличью нору ...

** двойной указатель ??

& что я могу сделать с & ссылкой, это @property?полный на объекте?странный указатель razzledazzle?

± Я вижу как +, так и - - перед объявлениями методов;Я видел, как Java комментирует некоторые объявления типов данных, вручную набирая +, и магия компиляции в Eclipse изменила бы их на -

Я, вероятно, задаю повторяющиеся вопросы и / или выход из поляпо моим догадкам;спасибо за ответы / правки.

Ответы [ 3 ]

11 голосов
/ 30 августа 2011

Вы попадаете в часть C, над которой построена цель-c.

** - указатель на указатель. Поскольку функции в C принимают аргументы по значению, это означает, что вы не можете изменить значение аргумента в этой функции. Но, обеспечив уровень косвенности и передав указатель на указатель, вы можете изменить значение.

& означает, что это ссылка. Если аргумент принимает ** и у вас есть * переменная, передайте ссылку на него.

Foo *foo;
[self changeFoo: &foo];

- (BOOL)changeFoo: (Foo **)foo
{
     // dereference the double pointer and assign a val = alloc init returns a *
     *foo = [[Foo alloc] init];
     return YES;
}

В target-c / cocoa обычно используется NSError. По сути, это аргумент вне.

NSError *err;
BOOL success = [self doSomething:@"Foo" error:&err];

- (BOOL)doSomething:(NSString*)withData error:(NSError**)error
{
}
5 голосов
/ 30 августа 2011

Как вы, возможно, знаете, указатель указывает на адрес объекта и является способом, которым вы ссылаетесь на объект. Двойной указатель иногда используется в Objective-C, главным образом для возврата NSErrors, где вы хотите вернуть адрес, то есть указатель, к объекту ошибки (NSError), если произошла ошибка, таким образом, вы передаете указатель, присвоенный null и вызывающая сторона может изменить этот указатель так, чтобы он указывал на адрес другого указателя, который, в свою очередь, указывает на объект NSError.

Амперсанд (&) в основном используется API-интерфейсами C более низкого уровня, например Основная графика. Они используются для ссылки на вещи, такие как текущий контекст. Пока большая часть вашего кода использует квадратные скобки вокруг вызовов методов, вы не увидите их очень часто.

Использование + или - перед объявлениями методов используется для различения методов класса (+) и экземпляра (-). Методы класса вызываются для самого класса (например, alloc), тогда как метод экземпляра вызывается для экземпляра этого объекта (такого как init).

2 голосов
/ 30 августа 2011

- и + перед объявлением метода назначают метод экземпляра и метод статического класса.Чтобы использовать метод экземпляра, вам нужно создать объект вашего класса, прежде чем вы сможете вызвать его метод, статический метод может быть вызван непосредственно из типа класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...