2008-12-28 10 views
2

Je commence à comprendre les pointeurs de l'objectif C. Ils ne se comportent pas comme je le ferais en fonction de divers tutoriels en C.Obj. C - Comprendre les pointeurs

Exemple:

// Define Name and ID 
NSString *processName = [[NSProcessInfo processInfo] processName]; 
NSNumber *processID = [NSNumber numberWithInt:[[NSProcessInfo processInfo] processIdentifier]]; 

// Print Name and ID 
NSLog(@"Process Name: %@ Process Identifier: %@", processName, processID); 

Si je comprends bien, processName est un pointeur vers un objet de type NSString. processID est un pointeur vers un objet de type NSNumber. Lorsque les deux sont appelés dans NSLog(), ils n'ont pas d'astérisque précédant leur nom et doivent donc renvoyer des valeurs de pointeur. Pourquoi n'y a-t-il pas de 'adresse de' personnage en Obj C? Pourquoi ce code fonctionne-t-il?

Nous vous remercions de votre temps.

Répondre

11

Les objets de l'objectif c sont représentés sous la forme de pointeurs vers des structures c contenant toutes les données d'objet. Si l'objet était une structure réelle (plutôt qu'un pointeur vers un), cela rendrait les choses comme passer des objets comme des paramètres de méthode beaucoup moins efficaces. Donc, une fois que vous initialisez un objet:

NSString *aString = /* initial value */; 

vous presque toujours il suffit d'utiliser le pointeur aString, plutôt que déréférencement il (à savoir * aString). Le symbole% @ de la fonction NSLog() attend un type de pointeur et appelle la méthode de description sur cet objet pour déterminer la valeur à afficher. Lorsque la méthode de description est appelée sur un objet NSString, elle renvoie le récepteur, de sorte que le symbole% @ est remplacé par le contenu de la chaîne dans la sortie.

7

Le %@ dans votre chaîne de format indique à NSLog d'appeler -description sur l'objet concerné et d'utiliser cette chaîne pour sa valeur d'affichage. Si vous voulez l'adresse du pointeur, vous devez utiliser %x ou %qx sur 64 bits.

+0

Ou utilisez% p, qui imprime une adresse de pointeur avec un format plus agréable pour les pointeurs. – mipadi