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



我有这本书教程中的代码:

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

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

我做错了什么?

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

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

这应该会解决你的错误!

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

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

1.第一种方法就像之前发布的答案:

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

告诉编译器不要在此C类型数组形状[]上使用ARC。

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

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

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

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

相关内容

最新更新