En Objective-C, j'aimerais savoir ce que l'on peut faire avec la fonction +
y -
à côté de la définition d'une méthode.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
En Objective-C, j'aimerais savoir ce que l'on peut faire avec la fonction +
y -
à côté de la définition d'une méthode.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
+
est pour une méthode de classe et -
est pour une méthode d'instance.
Par exemple
// 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".
Il y a une autre question portant sur la différence entre les méthodes de classe et d'instance .
C'est presque comme si les cinq caractères supplémentaires de "statique" étaient de trop pour eux.
@Anon : Les méthodes ne sont pas statiques. Ce sont des méthodes de classe. Elles peuvent être surchargées et font partie intégrante de la hiérarchie des classes. static implique quelque chose de très différent en C.
(+) pour les méthodes de classe et (-) pour les méthodes d'instance,
(+) Méthodes de classe:-
Sont des méthodes qui sont déclarées comme statiques. La méthode peut être appelée sans créer une instance de la classe. Les méthodes de classe ne peuvent agir que sur les membres de la classe et non sur les membres de l'instance, car les méthodes de classe ne connaissent pas les membres de l'instance. Les méthodes d'instance de la classe ne peuvent pas non plus être appelées à partir d'une méthode de classe, sauf si elles sont appelées sur une instance de cette classe.
(-) Méthodes d'instance:-
D'autre part, une instance de la classe doit exister avant qu'elles puissent être appelées, donc une instance d'une classe doit être créée en utilisant le mot-clé new. Les méthodes d'instance opèrent sur des instances spécifiques de classes. Les méthodes d'instance ne sont pas déclarées comme statiques.
Comment créer ?
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
Comment l'utiliser ?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
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ées pour des méthodes comme alloc ou des méthodes d'aide pour la classe qui ne nécessitent pas d'accès aux variables d'instance.
- sont des méthodes d'instance - elles se rapportent à une seule instance d'un objet. Généralement utilisées pour la plupart des méthodes d'une classe.
Voir le Spécification de la langue pour plus de détails.
En fait, les méthodes de classe ont accès aux variables d'instance, mais elles n'ont pas d'instance en tant que self
mais plutôt la classe. Ils ne sont tout simplement pas associés à une instance, et la recherche de méthode ne se fait pas par l'instance, mais par la classe. Pourtant, vous pourriez faire +exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
le guide de programmation objective c est une bonne ressource pour commencer
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.