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