1

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

4

2 回答 2

6

并非 Objective C 中的每个对象都是NSObject. 还有其他根类(例如NSProxy)不是从NSObject.

id绝对意味着任何对象。可以接收消息(包括 )的一切都是 Objective C 可以在没有类型警告的情况下Class传递。id

NSObject*仅对实际派生自 的对象有用NSObject。如果你传递了不是从它派生的东西,类型检查器会抱怨。

于 2012-04-23T15:20:49.897 回答
1

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

而且,如果您为它分配了一个新对象(从继承的任何类型),您将失去您创建的任何子类类型的继承和属性NSObject

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

于 2012-04-23T15:17:41.507 回答