Cette question est par pure curiosité. Comment Cocoa définit-il le type d'identifiant? Est-ce juste un typedef pour un vide *? De plus, si vous connaissez le fichier d'en-tête dans lequel il est défini, je serais intéressé à jeter un coup d'œil.Dans Cocoa, comment le type d'identifiant est-il défini?
Répondre
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, ...);
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.
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
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é:
Vous pouvez consulter le document ici: http://opensource.apple.com/source/objc4/objc4-437/runtime/objc.h Espérons que cela fera une faveur pour vous
- 1. Type défini par l'utilisateur non défini pour AppointmentItem dans Excel
- 2. Type-discordance entre List.reduce et le type défini
- 3. Type d'enregistrement défini par l'utilisateur dans CAL?
- 4. Utiliser un type non défini
- 5. Déclarer des variables avec le type défini par le modèle
- 6. Cocoa Services Programming - Comment identifier si l'élément sélectionné est un dossier ou un fichier avec NSFilenamesPboardType défini comme type d'envoi?
- 7. C++ min heap avec le type défini par l'utilisateur
- 8. Erreur BC30002 - Type XXX n'est pas défini
- 9. Comment changer le menu principal dans Cocoa?
- 10. C++ unordered_map type défini par l'utilisateur
- 11. en utilisant 'is' où le type est défini à l'exécution
- 12. Conversion de type chaîne de type défini par l'utilisateur
- 13. Comment puis-je obtenir le menu de l'application dans Cocoa
- 14. En utilisant un type défini par l'utilisateur
- 15. Cast type de données défini par l'utilisateur dans PostgreSQL
- 16. Comment ajouter un champ dans un modèle Django dont le type de données est défini sur
- 17. Une autre BC30002: Type n'est pas défini
- 18. Spurious "Type défini par l'utilisateur non défini" erreur dans Microsoft Word VBA
- 19. Détecter si le type d'un objet est un type défini par .NET Framework
- 20. Python Type de données défini par l'utilisateur
- 21. Type C# défini dans un assemblage qui n'est pas référencé
- 22. Comment trier une CArray d'un type défini par l'utilisateur?
- 23. Cocoa et Cocoa Touch: un objet dans le dictionnaire?
- 24. Delphi: Type d'accès défini dans dll pour être utilisé comme type de retour
- 25. WPF - style Mixing défini dans le dictionnaire avec un style défini dans le contrôle parent
- 26. Comment convertir un type non géré défini par l'utilisateur en type géré?
- 27. comment accéder à un type défini dans un fichier .ml dans un autre fichier .ML
- 28. php Le courant n'est pas défini dans le scope
- 29. Comment convertir un type de chaîne en type personnalisé défini par l'utilisateur
- 30. Déplacez le curseur dans l'économiseur d'écran Cocoa
+1 cmd + double-clic est merveilleusement utile! –
+1 Bonne réponse. J'espère travailler plus avec XCode l'année prochaine, et le raccourci clavier sera super utile à savoir. –
+1 sur même ma propre réponse. Je le savais déjà, mais c'est trop sacrément utile. – Mike