Я очень новичок в объективе c и в xcode. Я хотел бы знать, что означают знаки +
и -
рядом с определением метода.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
Я очень новичок в объективе c и в xcode. Я хотел бы знать, что означают знаки +
и -
рядом с определением метода.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
+
для метода класса, а -
- для метода экземпляра.
например.
// Not actually Apple code.
@interface NSArray : NSObject {
}
+ (NSArray *)array;
- (id)objectAtIndex:(NSUInteger)index;
@end
// somewhere else:
id myArray = [NSArray array]; // see how the message is sent to NSArray?
id obj = [myArray objectAtIndex:4]; // here the message is sent to myArray
// Btw, in production code one uses "NSArray *myArray" instead of only "id".
There еще один вопрос, касающийся разницы между методами класса и экземпляра.
(+) для методов класса и (-) для метода экземпляра,
(+) Методы класса: -
Методы, которые объявлены как статические. Метод может быть вызван без создания экземпляра класса. Методы класса могут работать только с членами класса, а не с членами экземпляра, поскольку методы класса не знают членов экземпляра. Методы экземпляра класса также нельзя вызывать из метода класса, если они не вызываются для экземпляра этого класса.
(-) Методы экземпляра: -
С другой стороны, необходимо, чтобы экземпляр класса существовал до его вызова, поэтому необходимо создать экземпляр класса с помощью ключевого слова new. Методы экземпляра работают с конкретными экземплярами классов. Методы экземпляра не объявляются как статические.
Как создать?
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
Как пользоваться?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
+ методы - это методы класса, то есть методы, которые не имеют доступа к свойствам экземпляров. Используется для методов, таких как методы alloc или вспомогательные для класса, которые не требуют доступа к переменным экземпляра
- методы - это методы экземпляра - относятся к одному экземпляру объекта. Обычно используется для большинства методов в классе.
Подробнее см. Спецификация языка.
Окончательное объяснение этого от Apple здесь, в разделе "Методы и обмен сообщениями":
Вкратце:
(метод может быть вызван без создания экземпляра класса). Итак, вы называете это так:
[className classMethod];
Сначала вам нужно создать экземпляр объекта, затем вы можете вызвать метод объекта). Вы можете вручную создать объект, подобный этому:
SomeClass* myInstance = [[SomeClass alloc] init];
(это по существу выделяет пространство памяти для объекта, а затем инициализирует объект в этом пространстве - упрощение, но хороший способ думать об этом. Вы можете выделять и инициировать объект отдельно, но никогда не делать этого - это может привести к неприятным проблемам, связанным с указателями и управление памятью)
Затем вызовите метод экземпляра:
[myInstance instanceMethod]
Альтернативный способ получить экземпляр объекта в Objective C выглядит следующим образом:
NSNumber *myNumber = [NSNumber numberWithInt:123];
который вызывает метод класса "numberWithInt" класса NSNumber, который является методом "фабрики" (т.е. методом, который предоставляет вам "готовый экземпляр" объекта).
Objective C также позволяет создавать определенные экземпляры объектов напрямую, используя специальный синтаксис, как в случае строки, подобной этой:
NSString * myStringInstance = @"abc";
ориентированный на программирование руководство - хороший ресурс для начала с