2009-10-10 7 views
4

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

5

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.

+0

Quel livre vous parlez? – outis

+0

Je suppose que cela signifie: http://www.amazon.com/exec/obidos/ISBN%3d0201548348/virtualschoolA/ Cordialement Friedrich – Friedrich

+0

Oui, c'est celui-là. Merci pour le lien. Je pense que ça vaut quand même la peine d'être lu. –

0

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.

+1

Il ne peut certainement pas s'agir d'une sous-classe NSObject car NSObject ne fait pas partie du langage Objective-C. – Chuck

+3

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

+1

À 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

Questions connexes