创建并初始化新对象时,为什么要使用id?我们不能使用(NSObject *)吗?
答案 0 :(得分:6)
并非Objective C中的每个对象都是NSObject
。还有其他根类(例如,NSProxy
),它们不是从NSObject
派生的。
id
绝对意味着任何对象。一切都是可以接收消息的目标C(包括Class
)可以作为id
传递而没有类型警告。
NSObject*
仅对实际派生自NSObject
的对象有用。如果你传递了一些非衍生出来的东西,那么输入checker就会抱怨。
答案 1 :(得分:1)
因为NSObject
是一个独特的Objective C类。它是大多数所有内容的基类(*但不是所有内容,+1到HamsterGene),但它仍然是一个类。
如果您分配了一个新对象(从NSObject
下降的任何类型),那么您将失去继承权&您创建的任何子类型的属性都是。
id
是roughly equivalent到void *
的行为,您可以将任何Objective C对象分配给id
,就像您可以分配任何随机内存块一样(不关心它的内容或类型)void *
。