1

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

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

class1并且class2是指向类型的指针id吗?在 的头文件中objc,我看到它Class只是一个结构指针id的 typedef,也是一个结构指针的 typedef。由于这些类型被声明为指向结构的指针,为什么我需要*在我的代码的第二个语句中包含一个?

4

2 回答 2

1

因为已经id有一个指针struct

typedef struct objc_object {
    Class isa;
} *id;

asMyClass不是指针。

于 2013-10-26T17:19:54.493 回答
0
  • id是一种类型。它可以保存指向任何对象的指针。
  • Class是一种类型。它可以保存指向任何类对象的指针。(类对象是表示类的对象。即当您调用类(+)方法时收到消息的对象。)
  • MyClass *是一种类型。它可以保存指向任何对象的指针,该对象是MyClass

class1并且class2是指向对象的指针。

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

于 2013-10-28T22:32:24.187 回答