Разница между + и - методами в Objective-C - PullRequest
29 голосов
/ 10 февраля 2010

В чем разница между методами, которые объявлены с - и методами, которые объявлены с +

* 1003 например *

- (void)methodname

+ (void)methodname

Ответы [ 5 ]

46 голосов
/ 10 февраля 2010

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

[myStringInstance length];

Методы с префиксом + являются методами класса. Это означает, что они могут быть вызваны на классы, без необходимости экземпляра, например:

[NSString stringWithString:@"Hello World"];
2 голосов
/ 14 августа 2016

+(void)methodname - переменная класса, а -(void)methodname - переменная объекта.

Допустим, вы создали вспомогательный класс, который имеет метод для обращения строки. Класс, который вы называете MYUtility.

Если вы используете +, например

+ (NSString *)reverse:(NSString *)stringToReverse

Вы можете использовать его прямо как

NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];

если вы использовали -, например

- (NSString *)reverse:(NSString *)stringToReverse

Вы должны использовать:

MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];

С помощью функции, основанной на классе, вы просто вызываете напрямую, но у вас нет доступа ни к каким локальным переменным, кроме #defines, которые вы можете сделать, потому что класс не создан.

Но с - (NSString вы должны создать экземпляр класса перед использованием, и у вас есть доступ ко всем локальным переменным.

Это не лучший выбор, и оставайтесь с ним, у многих классов есть оба, просто посмотрите на файл заголовка для NSString, он завален + функциями и - функциями.

2 голосов
/ 10 февраля 2010

минус методы экземпляра (доступны только через экземпляр объекта)

plus - это методы класса (как в Java Math.abs (), вы можете использовать его без объекта с мгновенным доступом)

1 голос
/ 10 февраля 2010

Согласно этой странице :

Методы экземпляра начинаются с - и методы уровня класса начинаются с +

См. этот вопрос SO для получения дополнительной информации.

0 голосов
/ 10 февраля 2010

Первый - это метод экземпляра, а второй - метод класса. Вы должны прочитать документацию Apple Objective-C, чтобы узнать о различии

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