关于声明指向 id 的指针的困惑



请考虑以下 2 个代码语句:

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

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

因为id指向struct的指针已经

typedef struct objc_object {
    Class isa;
} *id;

哪里MyClass不是指针。

  • id是一种类型。它可以保存指向任何对象的指针。
  • Class是一种类型。它可以保存指向任何类对象的指针。(类对象是表示类的对象,即调用类(+)方法时收到消息的对象。
  • MyClass *是一种类型。它可以保存指向作为MyClass实例的任何对象的指针

class1class2是指向对象的指针。

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

相关内容

最新更新