关于声明id的指针的困惑

时间:2013-10-26 17:18:17

标签: objective-c class object pointers struct

请考虑以下两个代码声明:

id class1 = [[MyClass alloc]init]; //First 
MyClass * class2 = [[MyClass alloc]init]; //Second

class1class2是指向id类型的指针吗?在objc的头文件中,我看到Class只是结构指针的typedef,而id也是结构指针的typedef。将这些类型声明为struct的指针,为什么我需要在代码的第二个语句中包含*

2 个答案:

答案 0 :(得分:1)

因为id已指向struct的指针:

typedef struct objc_object {
    Class isa;
} *id;

MyClass不是指针的地方。

答案 1 :(得分:0)

  • id是一种类型。它可以保存指向任何对象的指针。
  • Class是一种类型。它可以保存指向任何类对象的指针。 (类对象是表示类的对象。即在调用类(+)方法时获取消息的对象。)
  • MyClass *是一种类型。它可以包含指向任何MyClass
  • 实例的对象的指针

class1class2是指向对象的指针。

您似乎在类对象和类实例之间存在一些混淆。 MyClass *是指向MyClass实例的指针,即类为MyClass的对象。这与表示MyClass类本身的类对象完全不同。 MyClass类对象不是MyClass的实例。类对象是一个更高级的主题,您现在可能不应该考虑。