我想问那个id是什么?我不明白这个id是什么。我从一本书中得到了这个代码,它说的是用于引用任何类型对象的泛型类型。谁能帮我这个?我读过几次。仍然无法得到它。
void drawShapes (id shapes[], int count){
for (int i = 0; i < count; i++) {
id shape = shapes[i];
[shape draw];
}
} // drawShapes
答案 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确切知道这个对象是什么。在你的情况下,如果你只是查看那行代码,那么形状可能是一个字符串或数字或其他东西,虽然将任何内容传递给它可能会在以后给另一行提供错误。