Что означают знаки плюс и минус в задаче C рядом с методом?


Я очень новичок в objective c и в xcode. Я хотел бы знать, что такое + и - знаки рядом с определением метода означают.

- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
4 160

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 находится здесь, в разделе "методы и сообщения":

https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html

вкратце:

+ означает 'метод класса'

(метод может быть вызван без экземпляра создаваемого класса). Так что вы называете это как это:

[className classMethod]; 


- означает 'метод экземпляра'

вам нужно сначала создать экземпляр объекта, затем вы можете вызвать метод на объекте). Вы можете вручную создать экземпляр объекта следующим образом:

SomeClass* myInstance = [[SomeClass alloc] init];

(это по существу выделяет пространство памяти для объекта, а затем инициализирует объект в этом пространстве - чрезмерное упрощение, но хороший способ подумать об этом. вы можете выделить и инициализировать объект отдельно, но никогда не делать это - это может привести к неприятным вопросам, связанным с указателей и управления памятью)

затем вызовите метод экземпляра:

[myInstance instanceMethod]

альтернативный способ получить экземпляр объекта в Objective C выглядит следующим образом:

NSNumber *myNumber = [NSNumber numberWithInt:123];

который вызывает 'numberWithInt'метод класса класса NSNumber, который является "фабричным" методом (т. е. методом, который предоставляет вам "готовый экземпляр" объект.)

Objective C также позволяет создавать определенные экземпляры объектов непосредственно с помощью специального синтаксиса, например, в случае такой строки:

NSString *myStringInstance = @ "abc";