为什么Objective-C中的id类型会省略星号?
我对Objective-C为什么Objective-C中的id类型会省略星号?,objective-c,Objective C,我对Objective-Cid类型的理解是,它是指向未知类型对象的指针。在我看来,对于Objective-C类来说,这就像一个空白,上面有一些编译器糖,用于类型检查之类的东西。我的问题是,既然它是指针类型,为什么它不是id*而不是id?如果这是Java或C#,其中对象引用不是使用*声明的,那么我就不会感到惊讶了。但是在Objective-C中,每个类都由C样式的指针引用,那么为什么要隐藏未知对象类型的*?id typedef已经是一个指针: typedef struct objc_object
id
类型的理解是,它是指向未知类型对象的指针。在我看来,对于Objective-C类来说,这就像一个空白,上面有一些编译器糖,用于类型检查之类的东西。我的问题是,既然它是指针类型,为什么它不是id*
而不是id
?如果这是Java或C#,其中对象引用不是使用*
声明的,那么我就不会感到惊讶了。但是在Objective-C中,每个类都由C样式的指针引用,那么为什么要隐藏未知对象类型的*
?id typedef已经是一个指针:
typedef struct objc_object {
Class isa;
} *id;
typedef struct objc_class *Class;
从:
在Objective-C中,对象标识符具有不同的数据类型:id
。
此类型是任何类型对象的常规类型,而不考虑
类,并可用于类的实例和类对象
他们自己
id anObject;
对于Objective-C的面向对象构造,例如
作为方法返回值,id将int替换为默认数据类型。
(对于严格的C构造,例如函数返回值,int
保留默认类型。)
关键字nil定义为空对象,即值为0的id。
id、nil和Objective-C的其他基本类型在
头文件objc/objc.h
id定义为指向对象数据结构的指针:
因此,每个对象都有一个isa变量,告诉它它是一个实例的类。因为类类型本身就是
定义为指针:
typedef struct objc_object {
Class isa;
} *id;
typedef struct objc_class *Class;
isa
变量经常
称为“isa指针”
类中也没有星号。