No Objective-C, 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;
objective-c
syntax
method-declaration
Gyurisc
fonte
fonte
@classmethod
e mais@method
ou menos também. Por que tão conciso ...?(+) Métodos de classe: -
São métodos declarados como estáticos. O método pode ser chamado sem criar uma instância da classe. Os métodos de classe podem operar apenas em membros da classe e não em membros da instância, pois os métodos da classe desconhecem os membros da instância. Os métodos de instância da classe também não podem ser chamados de dentro de um método de classe, a menos que estejam sendo chamados em uma instância dessa classe.
(-) Métodos da instância: -
Por outro lado, exija que uma instância da classe exista antes de poder ser chamada, portanto, é necessário criar uma instância de uma classe usando a nova palavra-chave. Os métodos de instância operam em instâncias específicas de classes. Os métodos da instância não são declarados como estáticos.
fonte
+ métodos são métodos de classe - ou seja, métodos que não têm acesso às propriedades de uma instância. Usado para métodos como métodos de alocação ou auxiliar para a classe que não requerem acesso a variáveis de instância
- métodos são métodos de instância - estão relacionados a uma única instância de um objeto. Geralmente usado para a maioria dos métodos em uma classe.
Consulte a especificação de idioma para obter mais detalhes.
fonte
self
, mas sim a classe. Eles simplesmente não estão associados a uma instância, e a pesquisa de métodos não é através da instância, mas através da classe. Ainda assim, você poderia fazer+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
A explicação definitiva sobre isso 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 classe'
(o método pode ser chamado sem que uma instância da classe seja instanciada). Então você chama assim:
- significa 'método da instância'
Você precisa instanciar um objeto primeiro e depois chamar o método no objeto). Você pode instanciar manualmente um objeto como este:
(isso essencialmente aloca espaço de memória para o objeto e, em seguida, inicializa o objeto nesse espaço - uma simplificação excessiva, mas é uma boa maneira de pensar sobre isso. Você pode alocar e iniciar o objeto separadamente, mas nunca faz isso - pode levar a problemas desagradáveis relacionados a ponteiros e gerenciamento de memória)
Em seguida, chame o método da instância:
Uma maneira alternativa de obter uma instância de um objeto no Objective C é assim:
que está chamando o método da classe 'numberWithInt' da classe NSNumber , que é um método de 'fábrica' (ou seja, um método que fornece uma 'instância pronta' de um objeto).
O objetivo C também permite a criação de determinadas instâncias de objeto diretamente usando sintaxe especial, como no caso de uma string como esta:
NSString * myStringInstance = @ "abc";
fonte