我有来自图书教程的代码:
void drawShapes (id shapes[], int count)
{
int i;
for (i = 0; i < count; i++) {
id shape = shapes[i];
[shape draw];
}
}
Xcode报告我错误: “自动引用计数问题:必须明确描述对象数组参数的预期所有权”。
我做错了什么?
答案 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]是一个数组运算符[]。但由于您没有提供数组的名称,因此出现错误。