2013-10-11 1 views
-4

Что означает выражение:Значение выражения - (SomeClass *) имяМетода в Objective C

-(someClass *)someName; 

Как бы вы читали/описать его в простом английском языке?

Почему мы помещаем * внутри скобок, а не раньше someName?

Мы выделяем объект этим * или просто синтаксисом?

Это случай «Кастинг»?

Есть ли разница между Casting и возвратом указателя?

+2

почему даже не открытая Objective-C Википедии страница, прежде чем задавать такой вопрос? –

+0

Это подпись метода. Вы должны прочитать его так же, как и 'SomeClass * someName()' в C. –

+0

в объекте C это выражение будет найдено в интерфейсе или файле заголовка (someFile.h), это объявление интерфейса для метода, который вы позже определите в файле реализации (someFile.m) ... Знак «-» минус означает, что это метод экземпляра, который вызывается в экземпляре объекта. "(someClass *)" - это возвращаемый тип метода, а звездочка '*' означает, что этот метод вернет указатель на объект «someClass». наконец, «someName» - это имя метода. – Joe

ответ

2

- идентифицирует метод как метод экземпляра, в отличие от +, который идентифицирует метод как метод класса.

Тип возвращаемых данных является частью внутри скобки. Вы не можете вернуть объект по значению, поэтому вы должны вернуть указатель на объект, следовательно, * внутри скобки. Вы возвращаете pointer в someClass.

Начало имени метода следует за скобкой.

Вы бы назвали этот метод someName, и он возвращает указатель на объект someClass, и это метод экземпляра.

Если вы возвращали примитивный тип данных, то * был бы ненужным, поскольку вы можете возвращать примитивные типы данных. Тем не менее, вы все равно можете вернуть указатель на примитивный тип данных, и в этом случае вам понадобится *.

Например:

-(int)someName; //returns an integer 
-(int *)someOtherName; //returns a pointer to an integer 
2

Это семантика Objective-C для возвращаемого значения метода.

Это:

-(someClass *)someName; 

средства, что вызов SomeName будет возвращать указатель на объект SomeClass.

Например:

someClass *myClass = self.someName;