请考虑以下 2 个代码语句:
id class1 = [[MyClass alloc]init]; //First
MyClass * class2 = [[MyClass alloc]init]; //Second
class1
和class2
是指向键入id
的指针吗?在 objc
的头文件中,我看到Class
只是结构指针的 typedef,id
也是结构指针的 typedef。将这些类型声明为指向结构的指针后,为什么需要在代码的第二个语句中包含*
?
因为id
指向struct
的指针已经
typedef struct objc_object {
Class isa;
} *id;
哪里MyClass
不是指针。
-
id
是一种类型。它可以保存指向任何对象的指针。 -
Class
是一种类型。它可以保存指向任何类对象的指针。(类对象是表示类的对象,即调用类(+
)方法时收到消息的对象。 -
MyClass *
是一种类型。它可以保存指向作为MyClass
实例的任何对象的指针
class1
和class2
是指向对象的指针。
您似乎在类对象和类实例之间有一些很大的混淆。MyClass *
是指向MyClass
实例的指针,即类为 MyClass
的对象。这与表示MyClass
类本身的类对象完全不同。MyClass
类对象不是 MyClass
的实例。类对象是一个更高级的主题,您现在可能不应该考虑它。