在Objective-C(至少是Obj-C的Apple风味)中,为什么SEL不是一个类?这是效率问题吗?它是为了防止某种无限递归吗?是否只是没有动力让SEL上课?猜测欢迎,但如果答案是历史真相或猜测,请告诉我。
答案 0 :(得分:5)
它可以追溯到最早的Objective-C版本。如果我能找到Objective-C书的副本,我可以给你一个参考,但我认为它的好处并不明显。 Objective-C的早期版本是C语法的极小扩展。
在GCC中,SEL类型被实现为const char *,指向选择器名称的字符串表示。此实现利用了已在编译器中实现的常量字符串合并,以确保选择器值的唯一性。
“本书”当然是指面向对象编程:一种进化方法。谢谢你慢慢记忆弗里德里希。
答案 1 :(得分:0)
使它成为类类型几乎没有任何好处。如果它是一个NSObject子类,对于有效地被认为是唯一标识符的东西来说,这将是一个巨大的开销。在那时发送一个Objective-C呼叫会产生一个惩罚,例如性能的关键部分代码无法支付。
是的,我猜测为什么类型就是这样的理由。