O que significam os sinais de mais e menos no Objetivo C ao lado de um método?

Eu sou muito novo no objective c e no xcode. Eu gostaria de saber o que significam os sinais + e - ao lado de uma definição de método.

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

+ é para um método de class e - é para um método de instância.

Por exemplo

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

Há outra questão que trata da diferença entre os methods de class e instância .

(+) para methods de class e (-) por exemplo,

methods de class (+): –

São methods que são declarados como estáticos. O método pode ser chamado sem criar uma instância da class. Os methods de class só podem operar em membros de class e não em membros de instância, pois os methods de class não estão cientes dos membros da instância. Os methods de instância da class também não podem ser chamados de dentro de um método de class, a menos que estejam sendo chamados em uma instância dessa class.

(-) Métodos de instância: –

Por outro lado, é necessário que uma instância da class exista antes de poder ser chamada, portanto, uma instância de uma class precisa ser criada usando a nova palavra-chave. Métodos de instância operam em instâncias específicas de classs. Métodos de instância não são declarados como estáticos.

+ methods são methods de class – isto é, methods que não têm access a propriedades de instâncias. Usado para methods como methods de alocação ou auxiliares para a class que não requerem access a variables ​​de instância

– methods são methods de instância – relacionam-se a uma única instância de um object. Geralmente usado para a maioria dos methods em uma class.

Veja a especificação da linguagem para mais detalhes.

A explicação definitiva disso da Apple está aqui, na seção ‘Métodos e Mensagens’:

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

Em resumo:

+ significa ‘método de class’

(método pode ser chamado sem uma instância da class sendo instanciada). Então você chama assim:

 [className classMethod]; 

– significa ‘método da instância’

Você precisa instanciar um object primeiro, então você pode chamar o método no object). Você pode instanciar manualmente um object como este:

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

(essencialmente, aloca espaço de memory para o object e então inicializa o object naquele espaço – uma simplificação excessiva, mas uma boa maneira de pensar sobre isso. Você pode alocar e iniciar o object separadamente, mas nunca faz isso – pode levar a problemas desagradáveis ​​relacionados a pointers e gerenciamento de memory)

Em seguida, chame o método da instância:

 [myInstance instanceMethod] 

Uma maneira alternativa de obter uma instância de um object no Objective C é assim:

 NSNumber *myNumber = [NSNumber numberWithInt:123]; 

que está chamando o método de class ‘numberWithInt’ da class NSNumber, que é um método ‘factory’ (isto é, um método que fornece uma ‘instância pronta’ de um object).

O Objective C também permite a criação de certas instâncias de objects diretamente usando uma syntax especial, como no caso de uma string como esta:

NSString * myStringInstance = @ “abc”;