En Objective-C, me gustaría saber qué significan los signos +
y -
junto a una definición de método.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
objective-c
syntax
method-declaration
gyurisc
fuente
fuente
@classmethod
y@method
más o menos, también. ¿Por qué tan breve ...?(+) Métodos de clase: -
Son métodos que se declaran como estáticos. Se puede llamar al método sin crear una instancia de la clase. Los métodos de clase solo pueden funcionar en los miembros de la clase y no en los miembros de la instancia, ya que los métodos de la clase desconocen a los miembros de la instancia. Los métodos de instancia de la clase tampoco se pueden invocar desde un método de clase a menos que se invoquen en una instancia de esa clase.
(-) Métodos de instancia: -
Por otro lado, es necesario que exista una instancia de la clase antes de que se pueda invocar, por lo que se debe crear una instancia de una clase utilizando la nueva palabra clave. Los métodos de instancia operan en instancias específicas de clases. Los métodos de instancia no se declaran como estáticos.
fuente
Los métodos + son métodos de clase, es decir, métodos que no tienen acceso a las propiedades de una instancia. Se utiliza para métodos como alloc o métodos auxiliares para la clase que no requieren acceso a variables de instancia
- los métodos son métodos de instancia: se relacionan con una sola instancia de un objeto. Usualmente se usa para la mayoría de los métodos en una clase.
Consulte la Especificación del idioma para más detalles.
fuente
self
, sino la clase. Simplemente no están asociados con una instancia, y la búsqueda de métodos no es a través de la instancia, sino a través de la clase. Aún así, podrías hacerlo+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
La explicación definitiva de esto de Apple está aquí, en la sección 'Métodos y mensajería':
https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html
En breve:
+ significa 'método de clase'
(Se puede llamar al método sin una instancia de la clase que se está instanciando). Entonces lo llamas así:
- significa 'método de instancia'
Primero debe crear una instancia de un objeto, luego puede llamar al método en el objeto). Puede crear una instancia manual de un objeto como este:
(Esto esencialmente asigna espacio de memoria para el objeto y luego lo inicializa en ese espacio, una simplificación excesiva pero una buena manera de pensarlo. Puede asignar e iniciar el objeto por separado pero nunca hacer esto , puede conducir a problemas desagradables relacionados con los punteros y gestión de memoria)
Luego llame al método de instancia:
Una forma alternativa de obtener una instancia de un objeto en el Objetivo C es así:
que llama al método de clase 'numberWithInt' de la clase NSNumber, que es un método de 'fábrica' (es decir, un método que le proporciona una 'instancia preparada' de un objeto).
El objetivo C también permite la creación de ciertas instancias de objetos directamente usando una sintaxis especial, como en el caso de una cadena como esta:
NSString * myStringInstance = @ "abc";
fuente