2010-06-10 3 views
3

Existe-t-il une différence de déclaration d'objets en Objective-C entre (1) et (2), en plus du style et des préférences personnelles?Déclaration d'objet dans Objective-C

(1) Déclaration, allocation, initialisation sur une seule ligne.

Student *myStudent = [[Student alloc] init];

(2) déclaration multi-ligne, la répartition, l'initialisation.

Student *myStudent; 
myStudent = [Student alloc]; 
myStudent = [myStudent init]; 

Répondre

2

Dans le second cas, vous pouvez initialiser le même objet plus d'une fois. Vous envoyez un message alloc à la classe pour obtenir une instance non initialisée, que vous devez ensuite initialiser, avoir plusieurs façons de le faire:

NSString *myStr = [NSString alloc]; 
NSString *str1 = [myStr init]; //Empty string 
NSString *str2 = [myStr initWithFormat:@"%@.%@", parentKeyPath, key]; 
+0

qu'essayez-vous de faire ici? 'myStr',' str1' et 'str2' pointeront tous vers le même objet chaîne, c'est-à-dire que seule la dernière initialisation est pertinente – Christoph

+0

Je suis d'accord avec christoph, non seulement cela, mais si vous avez modifié la structure interne de str1 ne sont pas remplacés par le format initWith: entre init et initWithFormat: ces changements seront toujours présents. – Elfred

+1

Non, vous ne pouvez pas faire cela. Je veux dire, vous pouvez l'écrire, mais c'est totalement faux **. Aussi, si 'myStr',' str1' et 'str2' pointent vers la même chaîne dépend de l'implémentation. Dans la plupart des implémentations, ils seront différents objets lorsque vous le faites avec NSString ou tout autre cluster de classe, mais ce sera le même objet pour les autres classes. – Chuck

4

Non, il n'y a pas de différence. Le [Student alloc] alloue juste de la mémoire pour un pointeur, pendant ce temps [myStudent init] définit réellement les valeurs initiales.

Si vous connaissez C, pensez à alloc comme faisant

Student *myStudent = calloc(1, sizeof(Student)); 

Et l'appel init en fonction qui définit les valeurs initiales.

2

Non, pas de différence.

Questions connexes