id是"根类型"还是只是一种类型?

时间:2013-06-10 15:08:45

标签: objective-c

许多Objective-C开发人员,无论是新手还是专家,似乎都认为id好像是一种神奇的全能类型,你可以将对象强制转换并发送任何旧消息而不会产生任何后果(来自编译器,至少)。但是,当一个人真正看到id的定义时,它只不过是指向objc_object的指针。通过这种方式,它实际上是一个“Objective-C对象”,但没有任何东西可以从id“下降”。甚至NSObject的标题看起来也不像:

@interface NSObject : id

它只是:

@interface NSObject

现在,我坚信id所谓的类型中立性是其实施的副作用,但因为有些人仍然认为不是这样,我必须要问:< / p>

id类型的主要功能究竟是什么?

1 个答案:

答案 0 :(得分:10)

正如您所发现的,

id只是一个通用对象指针。因为它不是一个类,所以没有任何东西可以继承它。严格地说,NSObject不是Objective-C语言本身的一部分,只是特定实现的一部分。

id对于像Objective-C这样具有如此弱类型的语言很方便;它允许您保留通用对象指针并向它们发送任意消息。