2010-06-11 4 views
1

Voici la déclaration méthode à mi-chemin dans la documentation d'Apple: Learning Objective-C: A PrimerPourquoi n'y a-t-il pas de * dans cette déclaration de méthode?

- (void)insertObject:(id) anObject atIndex:(NSUInteger) index 

Pourquoi est-il pas * juste après NSUInteger. Je pensais que tous les objets étaient des types de pointeurs et tous les pointeurs fortement typés devaient avoir un caractère * après.

+0

Ne confondez pas NSInteger/NSUInteger avec NSNumber. NSInteger est (grossièrement) équivalent à CFIndex/ssize_t et NSUInteger est (grossièrement) équivalent à size_t. Je ne sais pas pourquoi ils n'utilisent pas seulement les types standard, mais voilà. –

Répondre

11

NSUInteger n'est pas un type d'objet, il s'agit d'un typedef à unsigned int. La seule raison pour laquelle vous voudriez vraiment utiliser un * dans ce contexte serait si vous vouliez obtenir l'adresse d'un int et y stocker quelque chose. (Certaines bibliothèques le font avec une messagerie d'erreur). Un exemple de ceci:

-(void) methodName: (NSUInteger *) anInt { 
    *anInt = 5; 
} 

NSUInteger a; 
[obj methodName: &a]; //a is now 5 
+2

Deux erreurs: NSInteger/NSUInteger/CFindex sont des types 64 bits sur les systèmes 64 bits, car ils sont utilisés pour représenter des choses comme les longueurs/comptes/offsets de choses en mémoire. Aussi, vous voulez dire * anInt = 5. –

+0

Je pense que la ligne 'NSUInteger * a' est incorrecte, elle devrait être sans le' * '. En l'état, vous vous retrouvez avec une variable locale de type pointeur (et dont la valeur n'est pas spécifiée), et dans la ligne ci-dessous vous appliquez l'opérateur '&' sur cette variable locale, en donnant une expression pointeur vers un pointeur quelque chose. Ceci est différent de ce que votre méthode attend, à savoir juste un pointeur. – harms

+0

@harms, vous avez raison. Il était soit en le définissant comme un pointeur et en le passant directement ou en le définissant normalement et en utilisant l'opérateur '&' (adresse-de). –

Questions connexes