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

Cod*_*aFi 10 objective-c

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

@interface NSObject : id
Run Code Online (Sandbox Code Playgroud)

它只是写道:

@interface NSObject
Run Code Online (Sandbox Code Playgroud)

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

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

Car*_*rum 10

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

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

  • 我更喜欢@bbum对`id`的定义.他将其描述为"可以接收任何信息的类型",它模拟了ObjC的"中性类型". (3认同)