我从书籍教程验证码:我有一个错误与我的书的示例代码
void drawShapes (id shapes[], int count)
{
int i;
for (i = 0; i < count; i++) {
id shape = shapes[i];
[shape draw];
}
}
而且Xcode的报告我错误: “自动引用计数的问题:必须明确地描述一个对象数组参数的预期所有权”。
我做错了什么?
我从书籍教程验证码:我有一个错误与我的书的示例代码
void drawShapes (id shapes[], int count)
{
int i;
for (i = 0; i < count; i++) {
id shape = shapes[i];
[shape draw];
}
}
而且Xcode的报告我错误: “自动引用计数的问题:必须明确地描述一个对象数组参数的预期所有权”。
我做错了什么?
而不是[形状绘制];你实际上应该放一些代码来绘制形状。 现在编译器认为这个[形状绘制]是一个数组运算符[]。但是由于您没有提供数组的名称,所以出现错误。
这就是Objective-C消息发送语法。假设'shape'是一个对象(它是 - 'id'是通用对象类型),它是有效的。这也与发布的错误消息没有关系。 – 2012-03-21 00:34:23
你说得对。我不知道这个语法。 – Bart113 2012-03-21 00:43:43
如果你想通过自动释放阵列,你的函数声明更改为:
void drawShapes (id __autoreleasing shapes[], int count)
,并应采取你的错误的呵护!
此问题由自动引用计数带来。
ARC是在iOS5.0之后由Apple提供的。在默认的iOS项目中,ARC被选中。
使用ARC时,应该提到数组必须使用NSArray,或者必须告诉编译器数组不是ARC对象。
有两种方法可以解决这个问题。两种方法都可以工作。
1.首先方法 像以前发布的答案:
void drawShapes (id __autoreleasing shapes[], int count)
告诉编译器不会对此C类阵列形状[]使用ARC。
或者
2.Second方法,停止使用ARC到项目
如果这个项目是iOS的项目,你可以重新创建一个iOS的项目,然后取消选择“自动引用计数”在对话框中。
如果此项目是Mac OS项目(或者您不想创建新的iOS项目),请转至项目设置页面,然后选择“Building Settings”标签,搜索“自动引用计数”,然后设置相对值为“否”。
从你的名字假设你可以阅读俄文,[这里是对同一个问题的一个可能的答案](http://www.gamedev.ru/code/forum/?id=156247)。 – dasblinkenlight 2012-03-21 00:25:09