【问题标题】:Why aren't objects of type 'id' initialized as pointers with a '*' in Objective-C?为什么在 Objective-C 中“id”类型的对象不被初始化为带有“*”的指针?
【发布时间】:2009-11-26 22:06:07
【问题描述】:

如果我使用的是 Objective-C,下面是我声明初始化 int 的方式:

int a = 1;

vs 一个对象:

myObj *a = [[myObj alloc] init];

所以这是一个指向对象的指针,用“*”表示。我的问题是,为什么不以这种方式声明 id 类型的对象?即,为什么会这样:

id genericObj;

而不是:

id *genericObj;

?

【问题讨论】:

    标签: objective-c pointers


    【解决方案1】:

    因为id被定义为:

    typedef struct objc_object {
        Class isa;
    } *id;
    

    所以它已经是一个指针了。

    【讨论】:

    • 是的,您可以通过命令双击代码中的单词id 轻松找到它,这将带您进入定义。
    【解决方案2】:

    因为id 表示标识符。标识符,像指针一样,标识对象。标识符不是对象本身。

    如果需要,您可以随时将其视为typedef <some-mysterious-root-type>* id

    【讨论】:

      【解决方案3】:

      帕维尔的回答是正确的。具体来说,“”在 objc.h 中声明为:

      typedef struct objc_class *Class;
      typedef struct objc_object {
          Class isa;
      } *id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多