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

时间:2013-06-22 11:30:26

标签: objective-c class pointers

我想问那个id是什么?我不明白这个id是什么。我从一本书中得到了这个代码,它说的是用于引用任何类型对象的泛型类型。谁能帮我这个?我读过几次。仍然无法得到它。

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

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

} // drawShapes

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

严格来说id被定义为指向objc_object结构的指针。

typedef struct objc_object {
    Class isa;
} *id;

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

但请不要将此与NSObject *混淆。虽然在许多情况下等价可能成立,但有些类不是从NSObject下降但仍然是有效的Objective-C对象(因此其类型可以是id)。一个值得注意的例子是NSProxy

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

id表示“对未知类的一些随机Objective-C对象的引用”一个例子是当你为一个uibutton创建一个at属性时,它有时会出现为id但是将其设置为uibutton会帮助xcode填充空白你在输入时因为现在xcode确切知道这个对象是什么。在你的情况下,如果你只是查看那行代码,那么形状可能是一个字符串或数字或其他东西,虽然将任何内容传递给它可能会在以后给另一行提供错误。