+(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, он завален + функциями и - функциями.