Iphone 什么是;必须明确描述对象数组参数的预期所有权;我的意思是,我怎样才能修复它?

Iphone 什么是;必须明确描述对象数组参数的预期所有权;我的意思是,我怎样才能修复它?,iphone,objective-c,Iphone,Objective C,以下函数定义的第一行有问题: void draw(id shapes[], int count) { for(int i = 0;i < count;i++) { id shape = shapes[i]; [shape draw]; } } void draw(id形状[],整数计数) { for(int i=0;i

以下函数定义的第一行有问题:

void draw(id shapes[], int count)
{   
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}   
void draw(id形状[],整数计数)
{   
for(int i=0;i
编译失败,错误为“必须明确描述对象数组参数的预期所有权”


错误的确切原因是什么?我怎样才能修好它

您正在环境中传递指针数组。您需要指定以下选项之一:

  • __强壮的
  • __软弱的
  • __不安全的
  • __自动释放
我认为在您的情况下,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuunrepaired
应该可以工作,假设您不同时对传递给
draw()
的形状执行任何操作

void draw(__unsafe_unretained id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
void draw(uuu不安全_u未保存的id形状[],整数计数)
{
for(int i=0;i
我也遇到了同样的问题,读到这篇文章我解决了我的问题,我尝试使用属性u unsafe_unrepaired,但对我来说不起作用,编译器告诉我,您试图将强var传递到unsafe_unrepaired。因此,在书样本中,使用强工作

void draw(__strong id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
void draw(强id形状[],整数计数)
{
for(int i=0;i
另一个简单的方法是禁用Xcode中的ARC


选择您的项目或目标,然后转到构建设置,在Apple LLVM compiler 8.1-语言部分下,您将看到选项Objective-C自动引用计数。将其设置为

您不需要在问题标题中包含语言;标记包含该信息。另外,请不要使用“某物”之类的缩写;坚持语法正确的英语。如果您发出错误消息,请明确说明。错误消息使查找现有问题变得容易。发帖前一定要搜索,以确保你没有要求重复的内容。@outis的Dup我认为如果你把语言放在标题中,它会帮助那些用谷歌搜索相同问题的人。@bakalolo:如果它在问题中起作用,也许,但SE站点已经在标题中添加了主标记。然而,如果把它放进去,就会产生一个词“汤”,这个词不能很好地描述这个问题。请参阅上的网站指南。谢谢!ARC是指垃圾收集器吗?@itenyh不是,它是自动引用计数。它与垃圾收集器非常非常不同。我在答案中加入了一个链接,指向苹果公司解释其工作原理的文件。