4

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

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

编译失败并出现错误“必须明确描述对象数组参数的预期所有权”。

错误的确切原因是什么?我该如何解决?

4

3 回答 3

7

您在ARC环境中传递一个指针数组。您需要指定以下内容之一:

  • __强的
  • __虚弱的
  • __unsafe_unretained
  • __自动释放

我认为在你的情况下__unsafe_unretained应该可以工作,假设你不对你draw()同时传递的形状做任何事情。

void draw(__unsafe_unretained id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
于 2012-04-29T04:22:38.747 回答
1

我遇到了同样的问题,阅读这篇文章我解决了我的问题,我尝试了属性 __unsafe_unretained 但对我不起作用,编译器告诉我,你正试图将一个强 var 传递给 unsafe_unretained。因此,在本书样本中使用 __strong 可以正常工作。

void draw(__strong id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
于 2013-01-26T20:23:09.953 回答
0

另一种简单的方法是在 Xcode 中禁用 ARC。

选择您的项目或目标,然后转到Build Settings并在Apple LLVM compiler 8.1 - Language部分下,您将看到选项Objective-C Automatic Reference Counting。将其设置为NO

于 2017-04-22T21:36:28.487 回答