En Objective-C, j'aimerais savoir ce que signifient les signes +
et à -
côté d'une définition de méthode.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
objective-c
syntax
method-declaration
gyurisc
la source
la source
@classmethod
et@method
ou deux, aussi. Pourquoi si laconique ...?(+) Méthodes de classe: -
Sont des méthodes déclarées statiques. La méthode peut être appelée sans créer d'instance de la classe. Les méthodes de classe ne peuvent fonctionner que sur les membres de classe et non sur les membres d'instance car les méthodes de classe ne connaissent pas les membres d'instance. Les méthodes d'instance de la classe ne peuvent pas non plus être appelées à partir d'une méthode de classe à moins qu'elles ne soient appelées sur une instance de cette classe.
(-) Méthodes d'instance: -
D'autre part, une instance de la classe doit exister avant de pouvoir être appelée, donc une instance d'une classe doit être créée à l'aide du mot-clé new. Les méthodes d'instance fonctionnent sur des instances spécifiques de classes. Les méthodes d'instance ne sont pas déclarées comme statiques.
la source
Les méthodes + sont des méthodes de classe, c'est-à-dire des méthodes qui n'ont pas accès aux propriétés d'une instance. Utilisé pour des méthodes telles que les méthodes alloc ou helper pour la classe qui ne nécessitent pas d'accès aux variables d'instance
- les méthodes sont des méthodes d'instance - se rapportent à une seule instance d'un objet. Habituellement utilisé pour la plupart des méthodes d'une classe.
Voir la spécification de langue pour plus de détails.
la source
self
, mais plutôt la classe. Ils ne sont simplement pas associés à une instance et la recherche de méthode ne se fait pas via l'instance, mais via la classe. Pourtant, vous pouvez le faire+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
L'explication définitive d'Apple à ce sujet est ici, dans la section `` Méthodes et messagerie '':
https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html
En bref:
+ signifie 'méthode de classe'
(la méthode peut être appelée sans qu'une instance de la classe ne soit instanciée). Donc, vous l'appelez comme ceci:
- signifie 'méthode d'instance'
Vous devez d'abord instancier un objet, puis vous pouvez appeler la méthode sur l'objet). Vous pouvez instancier manuellement un objet comme celui-ci:
(cela alloue essentiellement de l'espace mémoire pour l'objet, puis initialise l'objet dans cet espace - une simplification excessive mais une bonne façon d'y penser. Vous pouvez allouer et initialiser l'objet séparément mais ne le faites jamais - cela peut conduire à des problèmes désagréables liés aux pointeurs et gestion de la mémoire)
Appelez ensuite la méthode d'instance:
Une autre façon d'obtenir une instance d'un objet en Objective C est comme ceci:
qui appelle la méthode de classe 'numberWithInt' de la classe NSNumber, qui est une méthode 'factory' (c'est-à-dire une méthode qui vous fournit une 'instance prête à l'emploi' d'un objet).
Objective C permet également la création de certaines instances d'objet directement en utilisant une syntaxe spéciale, comme dans le cas d'une chaîne comme celle-ci:
NSString * myStringInstance = @ "abc";
la source