Le type d'ID est-il vraiment dynamique (liaison tardive à l'exécution) ou analogue au mot-clé 'var' dans C# (liaison tardive à la compilation)?Le type d'ID dans Objective-C est-il réellement dynamique
Répondre
De The Objective-C Programming Language:
id est défini comme pointeur vers une structure de données d'objet:
typedef struct objc_object {
Class isa;
} *id;
et surtout
Le type d'identification est complètement non limitatif. En soi, il ne fournit aucune information sur un objet, sauf qu'il s'agit d'un objet. À un certain point, un programme a généralement besoin de trouver des informations plus spécifiques sur les objets qu'il contient. Étant donné que le désignateur de type d'identification ne peut pas fournir cette information au compilateur, chaque objet doit être en mesure de le fournir lors de l'exécution.
La variable d'instance isa identifie la classe de l'objet - quel type d'objet il s'agit. Les objets ayant le même comportement (méthodes) et les mêmes types de données (variables d'instance) sont des membres de la même classe.
Les objets sont ainsi dynamiquement saisis lors de l'exécution. Chaque fois que cela est nécessaire, le système d'exécution peut trouver la classe exacte à laquelle un objet appartient, en demandant simplement à l'objet. (Pour en savoir plus sur le moteur d'exécution, reportez-vous au Guide de programmation d'exécution d'Objective-C). Le typage dynamique dans Objective-C sert de base à la liaison dynamique, comme nous le verrons plus tard.
Vraiment dynamique. Il n'y a même pas de vérification de type statique (sauf si vous déclarez la liste de protocoles pour la variable). Il est défini simplement comme un pointeur vers un objet. Par exemple, vous pouvez le faire:
Class classes[3];
classes[0] = [NSMutableString class];
classes[1] = [NSMutableArray class];
classes[2] = [NSMutableData class];
srandom(time(NULL));
id foo = [[classes[random % 3] alloc] init];
NSLog(@"It is a %@", [foo class]);
- 1. Allocation de mémoire dynamique 2D - ObjectiveC
- 2. Analyseur AMF0 dans ObjectiveC
- 3. Type dynamique dans le paramètre de méthode
- 4. Personnalisation de writeToFile dans ObjectiveC
- 5. Combine chaîne en ObjectiveC
- 6. NSString question ObjectiveC
- 7. Comment résoudre les fuites dans le code suivant? ObjectiveC
- 8. C# valeur absolue pour le type dynamique
- 9. Chargement d'une séquence d'images dans InterfaceBuilder -ObjectiveC
- 10. MVC utilisé dans la programmation ObjectiveC
- 11. Linq dynamique: comment spécifier le type StringComparison?
- 12. Création de type dynamique
- 13. Flex XML type dynamique
- 14. type de contenu dynamique
- 15. Reliure ObjectiveC classe C# problème
- 16. alloca et ObjectiveC Garbage Collector
- 17. C# Type Dynamique dans une propriété GenericCollection
- 18. Puis-je placer un sélecteur ObjectiveC @ dans un NSDictionary?
- 19. C#, type de retour dynamique
- 20. Haxe et tableaux Type dynamique
- 21. Extension dynamique d'un type lors de l'exécution?
- 22. Conversions de type dynamique C#
- 23. type retour dynamique d'une fonction
- 24. Aider avec le code GCC et ObjectiveC et Cygwin
- 25. Quelque chose fonctionne comme "did Init" ?? [objectif-c]
- 26. Comment puis-je vérifier si UIViewController "Did Dismiss"?
- 27. Type de retour dynamique avec indice de type en PHP?
- 28. comment le cache d'opcode fonctionne réellement?
- 29. Dans Ruby, comment fonctionne réellement coerce()?
- 30. Le tableau suivant est-il réellement multidimensionnel?
+1 extrait de code brillant. –