我的书籍示例代码出错了

时间:2012-03-21 00:17:12

标签: objective-c xcode arrays

我有来自图书教程的代码:

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

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

}

Xcode报告我错误: “自动引用计数问题:必须明确描述对象数组参数的预期所有权”。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

如果要传递自动释放数组,请将函数声明更改为:

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

这应该照顾你的错误!

答案 1 :(得分:0)

此问题由自动引用计数引起 ARC是iOS5.0之后的Apple带来的。在默认的iOS项目中,选择ARC 使用ARC时,您应该提到Array必须使用NSArray,或者您必须告诉编译器数组不是ARC对象。

有两种方法可以解决这个问题。两种方法都有效。

1.第一种方法 像之前发布的回答一样:

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

告诉编译器不要在这个C型数组[]上使用ARC。

或者
2.第二种方法,停止对项目使用ARC

如果此项目是iOS项目,您可以重新创建iOS项目,然后在对话框中取消选择“自动引用计数”。

如果此项目是Mac OS Project(或者您不想创建新的iOS项目),请转到项目设置页面,然后选择“Building Settings”标签,搜索“Automatic Reference Counting”,然后设置“NO”的相对值。

答案 2 :(得分:-2)

而不是[形状画];你应该放一些绘制形状的代码。 现在编译器认为这个[shape draw]是一个数组运算符[]。但由于您没有提供数组的名称,因此出现错误。