¿Qué significan los signos más y menos en el objective C junto a un método?

Soy muy nuevo en el objective c y en xcode. Me gustaría saber qué significan los signos + y - junto a la definición de un método.

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

+ es para un método de clase y - es para un método de instancia.

P.ej

 // 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". 

Hay otra pregunta que trata sobre la diferencia entre los métodos de clase y de instancia .

(+) para métodos de clase y (-) por ejemplo método,

(+) métodos de clase: –

Son métodos que se declaran como estáticos. El método se puede llamar sin crear una instancia de la clase. Los métodos de clase solo pueden operar en los miembros de la clase y no en los miembros de la instancia, ya que los métodos de clase no son conscientes de los miembros de la instancia. Los métodos de instancia de la clase tampoco pueden invocarse desde un método de clase a menos que se invoquen a una instancia de esa clase.

(-) Métodos de instancia: –

Por otro lado, se requiere una instancia de la clase para poder invocarla, 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.

+ los métodos son métodos de clase, es decir, métodos que no tienen acceso a las propiedades de instancias. Se usa para métodos como los métodos alloc o helper 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.

Ver la Especificación del Idioma para más detalles.

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í:

 [className classMethod]; 

– significa ‘método de instancia’

Primero debe crear una instancia de un objeto, luego puede llamar al método en el objeto). Puede instanciar manualmente un objeto como este:

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

(esto asigna esencialmente espacio de memoria para el objeto y luego incializa el objeto en ese espacio – una simplificación excesiva pero una buena manera de pensar sobre ello. Puede asignar e iniciar el objeto por separado pero nunca hacer esto – puede conducir a problemas desagradables relacionados con punteros y gestión de la memoria)

Luego llama al método de instancia:

 [myInstance instanceMethod] 

Una forma alternativa de obtener una instancia de un objeto en Objective C es así:

 NSNumber *myNumber = [NSNumber numberWithInt:123]; 

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).

Objective C también permite la creación de ciertas instancias de objetos directamente utilizando una syntax especial, como en el caso de una cadena como esta:

NSString * myStringInstance = @ “abc”;