10

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

@interface NSObject : id

它只是写着:

@interface NSObject

现在,我坚信id' 所谓的类型中立性是其实现的副作用,但是因为有些人仍然不这么认为,所以我不得不问:

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

4

1 回答 1

10

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

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

于 2013-06-10T15:16:10.850 回答