为什么不在初始化时使用NSObject而不是id

时间:2012-04-23 15:11:34

标签: objective-c nsobject

创建并初始化新对象时,为什么要使用id?我们不能使用(NSObject *)吗?

2 个答案:

答案 0 :(得分:6)

并非Objective C中的每个对象都是NSObject。还有其他根类(例如,NSProxy),它们不是从NSObject派生的。

id绝对意味着任何对象。一切都是可以接收消息的目标C(包括Class)可以作为id传递而没有类型警告。

NSObject*仅对实际派生自NSObject的对象有用。如果你传递了一些非衍生出来的东西,那么输入checker就会抱怨。

答案 1 :(得分:1)

因为NSObject是一个独特的Objective C类。它是大多数所有内容的基类(*但不是所有内容,+1到HamsterGene),但它仍然是一个类。

如果您分配了一个新对象(NSObject下降的任何类型),那么您将失去继承权&您创建的任何子类型的属性都是。

idroughly equivalentvoid *的行为,您可以将任何Objective C对象分配给id,就像您可以分配任何随机内存块一样(不关心它的内容或类型)void *