Почему SEL не является классом в Objective-C? - PullRequest
4 голосов
/ 10 октября 2009

В Objective-C (по крайней мере, вкус Apple Obj-C), почему SEL не класс? Это вопрос эффективности? Это чтобы предотвратить какую-то бесконечную рекурсию? Был ли просто стимул сделать SEL классом? Предположение приветствуется, но, пожалуйста, дайте мне знать, если ответ является исторической правдой или предположением.

Ответы [ 2 ]

5 голосов
/ 10 октября 2009

Это восходит к самым ранним версиям Objective-C. Если бы я мог найти свою копию книги Objective-C, я мог бы дать вам ссылку, но я думаю, что просто не было очевидно, какая польза будет. Ранние версии Objective-C были очень минимальными расширениями синтаксиса C.

В GCC тип SEL был реализован как const char *, указывающий на строковое представление имени селектора. В этой реализации использовалось постоянное объединение строк, которое уже реализовано в компиляторе, для обеспечения уникальности значений селектора.


«Книга», конечно, относится к Объектно-ориентированное программирование: эволюционный подход . Спасибо за пробежку по моей памяти, Фридрих.

0 голосов
/ 10 октября 2009

Создание этого типа класса добавляет мало или не приносит никакой пользы. Если бы это был подкласс NSObject, это было бы огромным количеством накладных расходов для чего-то, что фактически должно быть уникальным идентификатором. Направление вызова Objective-C в этот момент повлечет за собой штраф, который критическая часть кода не может позволить себе оплатить.

И да, я размышляю относительно обоснования, почему тип такой, какой он есть.

...