-1

I want to ask that what is that id? I don't understand what this id is. I got this code from a book and it says a generic type that's used to refer to any kind of object. Can anyone help me with this? I read it few times. Still can't get it.

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

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

} // drawShapes
4

4 回答 4

5

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

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

于 2013-06-22T11:35:20.323 回答
4

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

typedef struct objc_object {
    Class isa;
} *id;

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

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

于 2013-06-22T11:43:55.587 回答
1

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

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

于 2013-06-22T11:56:00.363 回答
0

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

于 2013-06-22T11:34:43.563 回答