En Objective-C (au moins, la saveur Apple de Obj-C), pourquoi SEL n'est pas une classe? Est-ce une question d'efficacité? Est-ce pour empêcher une sorte de récursion infinie? N'y avait-il simplement aucune incitation à faire de SEL une classe? Spéculation bienvenue, mais s'il vous plaît faites le moi savoir si une réponse est la vérité historique ou la spéculation.Pourquoi SEL n'est-il pas une classe en Objective-C?
Répondre
Il remonte aux premières versions de Objective-C. Si je pouvais trouver ma copie du livre Objective-C, je pourrais vous donner une référence, mais je pense que ce n'était pas évident de savoir quel serait l'avantage. Les premières versions d'Objective-C étaient des extensions très minimes de la syntaxe C.
Dans GCC, le type SEL a été mis en œuvre en tant que const char *, montrant une représentation de chaîne du nom du sélecteur. Cette implémentation a profité de la coalescence de chaîne constante, déjà implémentée dans le compilateur, pour assurer l'unicité des valeurs de sélecteur.
« Le livre » est bien sûr référence à Programmation orientée objet: une approche évolutive. Merci de faire mon jogging ma mémoire Friedrich.
Faire un type de classe ajoute bénéfice peu ou pas. S'il s'agissait d'une sous-classe NSObject, cela représenterait une charge énorme pour quelque chose qui est effectivement supposé être un identifiant unique. Envoyer un appel Objective-C à ce moment-là entraînerait une pénalité qu'une telle section critique de code ne peut pas payer.
Et oui, je spécule à justifier pourquoi le type est ce qu'il est.
Il ne peut certainement pas s'agir d'une sous-classe NSObject car NSObject ne fait pas partie du langage Objective-C. – Chuck
Il n'y aurait pas de surcharge liée à la création d'un SEL dans une classe, sauf pour un peu de mémoire. – bbum
À quelle section de code faites-vous référence? La plupart du code n'exigerait pas l'envoi de messages aux SEL et n'entraînerait donc aucune pénalité. Quant au manque d'avantages, cela semble difficile à prouver. Rendre les types de données orthogonaux présente généralement certains avantages, tels que permettre à toutes les données d'être stockées dans des collections sans avoir recours aux types de wrapper. – outis
- 1. sel d'adhésion ASP.NET?
- 2. Analyseur AMF0 dans ObjectiveC
- 3. Pourquoi PERSON n'est-il pas une classe ref?
- 4. Pourquoi wx.SingleChoiceDialog ne sous-classe pas correctement
- 5. Sûreté du sel visible publiquement
- 6. Quel est le problème avec une classe interne n'utilisant pas une classe externe en Java?
- 7. Pourquoi ne puis-je pas stocker une instance de classe PHP en tant que variable SESSION?
- 8. Dans ObjectiveC, les pointeurs sont-ils des variables d'instance de classe initialisées à 'nil' ou non?
- 9. auto "pas une structure ou une union" dans une classe UIViewController. Pourquoi?
- 10. Appelez une classe dans une autre classe en PHP
- 11. Données cryptées dans l'URL et le sel
- 12. Le moment de l'appel de la méthode de la super classe est-il important dans ObjectiveC?
- 13. Pourquoi ne puis-je pas appeler une méthode publique dans une autre classe?
- 14. Quand une classe Ruby n'est-elle pas une classe Ruby?
- 15. Pourquoi spécifier une constante définie dans une constante de classe en lançant une erreur?
- 16. à quoi sert le sel jeton anti-falsification?
- 17. Pourquoi cette classe python simple ne fonctionne-t-elle pas?
- 18. Joomla sel amélioré mot de passe
- 19. Pourquoi le fusible n'utilise pas la classe fournie dans file_class
- 20. Pourquoi je ne peux pas lancer une boucle en Javascript?
- 21. pourquoi la marge de classe ne fonctionne pas?
- 22. Pourquoi la classe de méthode Java n'est-elle pas générique?
- 23. Pourquoi inspect.getsource ne renvoie pas la source de classe entière?
- 24. Pourquoi l'appel créé en tant que méthode de classe ne sauvegarde-t-il pas l'enregistrement?
- 25. Pourquoi ne puis-je pas utiliser une expression pour créer un nom de classe dans Perl?
- 26. AS3 - Pourquoi ne puis-je pas utiliser un stage en dehors de ma classe racine?
- 27. Pourquoi .val() n'est pas une fonction?
- 28. Pourquoi ne puis-je pas créer une nouvelle sous-classe et l'utiliser dans la même phrase?
- 29. Passer une classe en paramètre?
- 30. var pour une classe en PHP
Quel livre vous parlez? – outis
Je suppose que cela signifie: http://www.amazon.com/exec/obidos/ISBN%3d0201548348/virtualschoolA/ Cordialement Friedrich – Friedrich
Oui, c'est celui-là. Merci pour le lien. Je pense que ça vaut quand même la peine d'être lu. –