Понимание Обозначения Objective C - PullRequest
0 голосов
/ 09 февраля 2012

Может кто-нибудь объяснить формат документации для Objective-C:

например.,

+ (id)arrayWithObject:(id)anObject
  1. Почему знак плюс? Почему знак минус в определенных обстоятельствах? Ребята, можете ли вы помочь мне точно понять, в каком формате эти строки кода появляются в начале каждой задачи на странице справки?

  2. Что это значит, когда метод определяется следующим образом:

    -(NSString *)description
    
  3. Почему * там? Это указатель на что-то? Почему он так отформатирован?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Почему знак плюс? Почему знак минус в определенных обстоятельствах?

Знак плюс означает, что метод является методом класса . Вы вызываете его в class , и он возвращает экземпляр класса. Итак: +arrayWithObject: будет называться так:

NSArray *myArray = [NSArray arrayWithObject:someObject];

Это создает одноэлементный экземпляр NSArray* с именем myArray, который содержит ссылку на someObject.

(Для краткости я не буду вдаваться в аспект управления памятью этого метода, за исключением того, что скажу, что autorelease будет вызываться для вас в конце срока службы myArray. Другой вариант этого Метод вернет сохраненный экземпляр NSArray*, который вы должны release по своему усмотрению, который вы можете предпочесть, если массив должен жить дольше срока действия функции, в которой он находится. Прочитайте в памяти Apple Руководство по программированию управления , или изучите учебник или книгу Objective-C. Понимание того, как управлять памятью, имеет решающее значение для успешной разработки Objective-C.)

Знак минус означает, что метод является экземпляром метода . Вы вызываете его для экземпляра класса, и он возвращает что-то еще, например, число или другой объект.

В качестве примера, скажем, мы хотим знать количество объектов в экземпляре NSArray, который мы только что создали. Поэтому мы вызываем метод -count для myArray:

NSUInteger numberOfObjects = [myArray count];
NSLog(@"there are %u objects in myArray", numberOfObjects);

(Обратите внимание, что до NSUInteger нет *. Это потому, что NSUInteger не тип объекта, а просто другое имя, которое Apple использует для типа данных unsigned int C.)

Объявление метода экземпляра -count:

-(NSUInteger)count;

, что будет объяснено ниже.

Что это значит, когда метод определяется следующим образом: ... Почему * там? Это указатель на что-то? Почему он так отформатирован?

Следующий метод:

-(NSString *)description

объявляет, что у нас есть экземпляр метод с именем -description, который работает с экземпляром класса (каким бы ни был этот класс, скажем, NSArray* экземпляр) и возвращает NSString*, который дает description этого экземпляра.

Обратите внимание, что этот метод возвращает NSString*, а не NSString. Это потому, что эти функции передают ссылки или указатели на объекты, а не на сами объекты.

Если мы вызовем -description на myArray, предполагая, что он содержит someObject, то консоль Xcode покажет описание myArray и его содержимое:

NSLog(@"%@", [myArray description]);

Обратите внимание, что Apple предоставляет ярлык, в котором -description автоматически вызывается для объекта при использовании с NSLog(). Таким образом, вы также можете сделать следующее:

NSLog(@"%@", myArray);

для того, чтобы позвонить -description на myArray.

Поскольку вызов -description для объекта является избыточным в операторе NSLog(), разработчики Objective-C предпочитают этот второй подход.

0 голосов
/ 09 февраля 2012

1. «+» означает, что функция является статической, а «-» означает, что функция требует экземпляра. Статическая функция - это та, для которой вам не нужен экземпляр, а вместо этого вызывается класс. Часто это инициализаторы, которые будут возвращать вам автоматически выпускаемый экземпляр.

2. Да, это потому, что это указатель на объект C объекта NSString

3. - (NSString *) описание

Это означает, что класс, для которого вы просматриваете документ, имеет метод с именем description, который при вызове экземпляра этого класса возвращает указатель на объект NSString.

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