В чем разница между объявленными методами и методами, объявленными с помощью
например
- (void)methodname
+ (void)methodname
В чем разница между объявленными методами и методами, объявленными с помощью
например
- (void)methodname
+ (void)methodname
Методы с префиксом -
- это методы экземпляра. Это означает, что их можно вызвать только в экземпляре класса, например:
[myStringInstance length];
Методы с префиксом +
- это методы класса. Это означает, что они могут быть вызваны в классах без необходимости экземпляра, например:
[NSString stringWithString:@"Hello World"];
минус - это методы экземпляра (доступны только через экземпляр объекта)
plus - это методы класса (например, в Java Math.abs(), вы можете использовать его без объекта-объекта)
В соответствии с эта страница:
Методы экземпляров начинаются с - и методы уровня класса начинаются с +
Подробнее см. этот вопрос SO.
Первый - это метод экземпляра, а второй - метод класса. Вы должны прочитать документацию Apple Objective-C, чтобы узнать о различии.
+(void)methodname
- это переменная класса, а -(void)methodname
- объектная переменная.
Предположим, вы создали класс утилиты, который имеет метод для изменения строки. Класс, который вы называете MYUtility.
Если вы используете +, например
+ (NSString *)reverse:(NSString *)stringToReverse
Вы можете использовать его прямо, как
NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];
если вы использовали a -, например
- (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, он завален функциями + и -.