Objective c 以下代码中的“id”是什么?在目标C中

Objective c 以下代码中的“id”是什么?在目标C中,objective-c,class,pointers,Objective C,Class,Pointers,我想问那是什么身份证?我不明白这个身份证是什么。我从一本书中得到了这段代码,它表示一个泛型类型,用于引用任何类型的对象。有人能帮我吗?我读了几遍。还是拿不到 void drawShapes (id shapes[], int count){ for (int i = 0; i < count; i++) { id shape = shapes[i]; [shape draw]; } } // drawShapes id表示对未知类的某个

我想问那是什么身份证?我不明白这个身份证是什么。我从一本书中得到了这段代码,它表示一个泛型类型,用于引用任何类型的对象。有人能帮我吗?我读了几遍。还是拿不到

void drawShapes (id shapes[], int count){

    for (int i = 0; i < count; i++) {
        id shape = shapes[i];
        [shape draw];
    }

} // drawShapes

id表示对未知类的某个随机Objective-C对象的引用。例如,当您为uibutton创建at属性时,有时它会显示为id,但将其设置为uibutton将有助于xcode在键入时为您填补空白,因为现在xcode确切知道此对象是什么。在您的情况下,形状可以是字符串、数字或其他东西,如果您只是查看该行代码,但向其中传递任何内容可能会在稍后给另一行错误。

id是未知Objective-C对象的别名。它可用于声明任何Objective-C对象值

在您的示例中,它使用的是一个id而不是一个特定的类,因此代码不依赖于shape的类。

严格来说,id定义为指向objc_对象结构的指针

实际上,这意味着任何Objective-C对象


但是,不要将其与NSObject*混淆。在许多情况下,等价性可能成立,但有些类不是从NSObject派生的,但仍然是有效的Objective-C对象,因此其类型可以是id。一个显著的例子是Nproxy。

在您发布的代码中,id代表将存储在C静态数组中的项的类型。特别是,id类型指示任何Objective-C对象


无论如何,我不建议在Objective-C中使用C静态数组来包含未知类型的对象,因为使用NSArray实例可以获得相同的结果。

顺便问一下,哪本书?我不确定我是否赞成用C风格写Objective-C。@Abizem,我还是不明白。你能举个例子吗?
typedef struct objc_object {
    Class isa;
} *id;