Objective c 我的书本示例代码有一个错误

Objective c 我的书本示例代码有一个错误,objective-c,xcode,arrays,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报告我的错误: 自动引用计数问题:必须明确描述对象数组参数的预期所有权 我做错了什么?而不是[shape draw];实际上,您应该放置一些绘制形状的代码。 现在编译器认为这个[shape d

我从书籍教程中获得了以下代码:

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

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

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


我做错了什么?

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

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

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

这应该会解决你的错误

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

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

1.第一种方法 与之前发布的答案类似:

void drawShapes (id __autoreleasing shapes[], int count)
告诉编译器不要在此C类型数组形状[]上使用圆弧

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

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


如果此项目是Mac OS Projector,您不想创建新的iOS项目,请转到项目设置页面,然后选择Building Settings tag,搜索Automatic Reference Counting,然后将相对值设置为NO.

假设您的姓名可以阅读俄语。这是Objective-C message send语法。假设shape是一个对象,并且-id是通用对象类型,那么它是有效的。这也与发布的错误消息无关。