Почему знак плюс? Почему знак минус в определенных обстоятельствах?
Знак плюс означает, что метод является методом класса . Вы вызываете его в 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 предпочитают этот второй подход.