许多Objective-C开发人员,无论是新手还是专家,似乎都认为id就像是一些神奇的全部类型,您可以将对象投射到任何旧的消息,并发送任何旧的消息(至少从编译器).但是,当实际看到id的定义时,它只不过是一个指向objc_object的指针.以这种方式,它实际上是一个“Objective-C对象”,但是没有什么可以从id下降.即使是NSObject的头也不像:
@interface NSObject : id
它只是:
@interface NSObject
现在,我坚信,id的中立性是实施的一个副作用,但是由于还有其他的一些,我必须问:
id类型的主要功能究竟是什么?
解决方法
id只是一个通用的对象指针,如你所见.既然它不是一个类,没有什么可以继承.严格来说,NSObject不是Objective-C语言本身的一部分,只是特定实现的一部分.
id对于具有这种弱类型的Objective-C的语言是方便的;它允许您保留通用对象指针,并发送任意消息.