В Objective-C, я хотел бы знать , что +
и -
знаки рядом с средним определением метода.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
objective-c
syntax
method-declaration
gyurisc
источник
источник
@classmethod
и@method
или так, тоже. Почему так кратко ...?(+) Методы класса: -
Методы, которые объявлены как статические. Метод может быть вызван без создания экземпляра класса. Методы класса могут работать только с членами класса, а не с членами экземпляра, поскольку методы класса не знают членов экземпляра. Методы экземпляра класса также нельзя вызывать из метода класса, если они не вызываются для экземпляра этого класса.
(-) Методы экземпляра: -
С другой стороны, требуется, чтобы экземпляр класса существовал до их вызова, поэтому необходимо создать экземпляр класса с помощью ключевого слова new. Методы экземпляра работают с конкретными экземплярами классов. Методы экземпляра не объявляются как статические.
источник
+ методы - это методы класса, то есть методы, которые не имеют доступа к свойствам экземпляров. Используется для таких методов, как alloc или helper, для класса, которым не требуется доступ к переменным экземпляра
- методы являются методами экземпляра - относятся к одному экземпляру объекта. Обычно используется для большинства методов в классе.
Смотрите спецификацию языка для более подробной информации.
источник
self
, а есть класс. Они просто не связаны с экземпляром, и поиск метода осуществляется не через экземпляр, а через класс. Тем не менее, вы могли бы сделать+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
Окончательное объяснение этого от Apple здесь, в разделе «Методы и обмен сообщениями»:
https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html
Вкратце:
+ означает «метод класса»
(метод может быть вызван без создания экземпляра класса). Итак, вы называете это так:
- означает «метод экземпляра»
Сначала вам нужно создать экземпляр объекта, затем вы можете вызвать метод объекта). Вы можете вручную создать объект, подобный этому:
(это по существу выделяет пространство памяти для объекта, а затем инициализирует объект в этом пространстве - упрощение, но хороший способ думать об этом. Вы можете выделять и инициировать объект отдельно, но никогда не делать этого - это может привести к неприятным проблемам, связанным с указателями и управление памятью)
Затем вызовите метод экземпляра:
Альтернативный способ получить экземпляр объекта в Objective C выглядит следующим образом:
который вызывает метод класса «numberWithInt» класса NSNumber, который является методом «фабрики» (т. е. методом, который предоставляет вам «готовый экземпляр» объекта).
Objective C также позволяет создавать определенные экземпляры объектов напрямую, используя специальный синтаксис, как в случае строки, подобной этой:
NSString * myStringInstance = @ "abc";
источник