web-dev-qa-db-fra.com

Que signifient les signes plus et moins dans l'Objectif C à côté d'une méthode?

Je suis très nouveau en Objective C et en xcode. Je voudrais savoir ce que le + et - signes à côté d'un moyen de définition de méthode.

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

+ 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 ne autre question traitant de la différence entre les méthodes de classe et d'instance .

219
Georg Schölly

(+) pour les méthodes de classe et (-) pour la méthode d'instance,

(+) Méthodes de classe: -

Sont des méthodes déclarées comme 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 la classe et non sur les membres de l'instance, car elles ne sont pas connues des membres de l'instance. Les méthodes d'instance de la classe ne peuvent également pas ê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'un autre côté, il faut qu'une instance de la classe existe avant de pouvoir être appelée. Par conséquent, une instance d'une classe doit être créée à l'aide du nouveau mot-clé. 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.

Comment créer?

@interface CustomClass : NSObject

+ (void)classMethod;
- (void)instanceMethod;

@end

Comment utiliser?

[CustomClass classMethod];

CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
41
Vandit Mehta

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 les méthodes telles que alloc ou helper pour la classe qui ne nécessite 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 le Spécification de la langue pour plus de détails.

17
Robert Christie

L’explication définitive en est donnée par Apple), sous 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'

(méthode peut être appelée sans qu'une instance de la classe ne soit instanciée). Donc, vous appelez ça comme ça:

[className classMethod]; 


- 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 ceci:

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

(Cela alloue essentiellement de la mémoire à l'objet puis initalise l'objet dans cet espace - une simplification excessive mais un bon moyen d'y penser. Vous pouvez allouer et initialiser l'objet séparément mais ne faites jamais cela - cela peut entraîner de vilains problèmes liés aux pointeurs et à la gestion de la mémoire)

Ensuite, appelez la méthode d'instance:

[myInstance instanceMethod]

Une autre façon d’obtenir une instance d’un objet en Objective C est la suivante:

NSNumber *myNumber = [NSNumber numberWithInt:123];

qui appelle la méthode 'numberWithInt' class 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').

Objective C permet également la création de certaines instances d'objet directement à l'aide d'une syntaxe spéciale, comme dans le cas d'une chaîne comme celle-ci:

NSString * myStringInstance = @ "abc";

5
Chris Halcrow