我对 Objective-Cid
类型的理解是它是一个指向未知类型对象的指针。在我看来,它就像 Objective-C 类的 void* ,顶部有一些编译器糖,用于类型检查之类的东西。我的问题是为什么它id*
不是id
then ,因为它是指针类型?如果这是 Java 或 C#,其中没有使用 an 声明对象引用,*
那么我就不会那么惊讶了。但是在 Objective-C 中,每个类都被 C 风格的指针引用,那么为什么要隐藏*
未知对象类型呢?
问问题
1211 次
1 回答
11
id typedef
已经是一个指针:
typedef struct objc_object {
Class isa;
} *id;
在 Objective-C 中,对象标识符是一种不同的数据类型:
id
. 这种类型是任何类型的对象的通用类型,无论类如何,并且可以用于类的实例和类对象本身。id anObject;
对于 Objective-C 的面向对象构造,例如方法返回值,id 替换 int 作为默认数据类型。(对于严格的 C 构造,例如函数返回值,int 仍然是默认类型。)
关键字nil被定义为一个空对象,一个值为0的id。id、nil以及Objective-C的其他基本类型在头文件objc/objc.h中定义。
id 被定义为指向对象数据结构的指针:
typedef struct objc_object {
Class isa;
} *id;
因此,每个对象都有一个 isa 变量,告诉它它是什么类的实例。由于 Class 类型本身定义为指针:
typedef struct objc_class *Class;
该
isa
变量通常被称为“isa 指针”。</p>
于 2012-09-28T11:26:18.777 回答