193 votes

Que signifient les signes plus et moins en Objective-C à côté d'une méthode ?

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;

237voto

Georg Schölly Points 63123

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

69 votes

C'est presque comme si les cinq caractères supplémentaires de "statique" étaient de trop pour eux.

2 votes

25 votes

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

49voto

Vandit Mehta Points 191

(+) 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];

19voto

Robert Christie Points 7323

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.

0 votes

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; }

1voto

aaa Points 11

0voto

Ahmed Kotb Points 2492

le guide de programmation objective c est une bonne ressource pour commencer

Prograide.com

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.

Powered by:

X