Методы с префиксом -
являются экземплярами методов. Это означает, что они могут быть вызваны только для экземпляра класса, например:
[myStringInstance length];
Методы с префиксом +
являются методами класса. Это означает, что они могут быть вызваны на классы, без необходимости экземпляра, например:
[NSString stringWithString:@"Hello World"];
+(void)methodname
является переменной класса, а -(void)methodname
является объектной переменной.
Допустим, вы создали вспомогательный класс, в котором есть метод для обращения строки. Класс, который вы называете MYUtility.
Если вы используете +, как
+ (NSString *)reverse:(NSString *)stringToReverse
Вы можете использовать его напрямую, как
NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];
, если вы использовали -, как
- (NSString *)reverse:(NSString *)stringToReverse
You должны использовать:
MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];
С помощью функции, основанной на классе, вы просто вызываете напрямую, но у вас нет доступа ни к каким локальным переменным, кроме #defines, которые вы можете сделать, потому что класс не создан.
Но с - (NSString вы должны создать экземпляр класса перед использованием, и у вас есть доступ ко всем локальным переменным.
Это не самая лучшая вещь, и оставайтесь с ней, многие классы имеют оба, просто посмотрите на заголовочный файл для NSString, он усеян + функциями и - функциями.
Согласно эта страница :
Методы экземпляра начинаются с -, а методы уровня класса начинаются с +
См. этот вопрос SO для получения дополнительной информации.
минус - это методы экземпляра (доступные только через созданный экземпляр)
плюс методы класса (например, в Java Math.abs (), вы можете использовать это без мгновенного объекта)
Первый - это метод экземпляра, а второй - метод класса. Вам следует прочитать документацию Apple по Objective-C, чтобы узнать о разнице.