Что означают знаки плюс и минус в задаче C рядом с методом?
Я очень новичок в objective c и в xcode. Я хотел бы знать, что такое +
и -
знаки рядом с определением метода означают.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
4 ответа:
+
для метода класса и-
для метода экземпляра.например.
// Not actually Apple's 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".
здесь еще один вопрос, касающийся разницы между методами класса и экземпляра.
(+) для методов класса и (-) для метода экземпляра,
(+)класса методов:-
- Это методы, которые объявляются как статические. Метод может быть вызван без создания экземпляра класса. Методы класса могут работать только с членами класса, а не с членами экземпляра, поскольку методы класса не знают о членах экземпляра. Методы экземпляра класса также не могут быть вызваны из метода класса, если они не вызываются на экземпляре этого класс.
(-)примеру методов:-
с другой стороны, требуется, чтобы экземпляр класса существовал до их вызова, поэтому экземпляр класса должен быть создан с помощью ключевого слова new. Методы экземпляра работают с конкретными экземплярами классов. Методы экземпляра не объявляются как статические.
+ методы методы класса - это методы, которые не имеют доступа к свойствам экземпляров. Используется для таких методов, как 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";