2010-01-02 5 views

Répondre

23

Maintenez la touche de commande enfoncée et double-cliquez sur un terme mis en surbrillance pour accéder à sa définition.

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 


typedef struct objc_selector *SEL;  
typedef id   (*IMP)(id, SEL, ...); 
+1

+1 cmd + double-clic est merveilleusement utile! –

+0

+1 Bonne réponse. J'espère travailler plus avec XCode l'année prochaine, et le raccourci clavier sera super utile à savoir. –

+0

+1 sur même ma propre réponse. Je le savais déjà, mais c'est trop sacrément utile. – Mike

6

dans objc.h

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 

Pour en savoir sur votre propre, dans XCode, clic droit id - ou tout autre type - et sélectionnez Jump à la définition. Il est intéressant de noter les similitudes avec d'autres systèmes d'objets basés sur C/C++; un pointeur d'objet - un id - pointe vers une structure qui commence par un point vers des informations de classes partagées. J'ai beaucoup d'implémentations C++, ce serait la table de fonction virtuelle, comme ce serait le cas avec COM de Microsoft. Dans Cocoa, les détails de objc_class ne nous sont pas révélés dans le fichier d'en-tête.

2

Le type id est généralement déclarée comme:

typedef struct objc_object *id; 

C'est critique pour Objective-C++ où le type fait partie d'un nom de fonction mutilée.

Vous pouvez jeter un oeil à /usr/include/objc/objc.h

7

Il est delcared dans /usr/include/objc/objc.h (Leopard) comme suit:

typedef struct objc_object { 
    Class isa; 
} *id; 

Ce qui signifie qu'il n'est pas à void * tous, mais plutôt un pointeur vers une structure qui contient un seul membre, pointant vers la définition de la classe. Intéressant en effet.

Je me souviens quand je commençais juste à entrer dans C et j'apprenais qu'Objective-C était initialement implémenté comme un simple préprocesseur au-dessus de C. Ce n'est plus tout à fait ça.

La meilleure lecture sur le sujet que j'ai trouvé:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

Questions connexes