以下函数定义的第一行有问题:
void draw(id shapes[], int count)
{
for(int i = 0;i < count;i++) {
id shape = shapes[i];
[shape draw];
}
}
编译失败并出现错误“必须明确描述对象数组参数的预期所有权”。
错误的确切原因是什么?我该如何解决?
以下函数定义的第一行有问题:
void draw(id shapes[], int count)
{
for(int i = 0;i < count;i++) {
id shape = shapes[i];
[shape draw];
}
}
编译失败并出现错误“必须明确描述对象数组参数的预期所有权”。
错误的确切原因是什么?我该如何解决?
您在ARC环境中传递一个指针数组。您需要指定以下内容之一:
我认为在你的情况下__unsafe_unretained
应该可以工作,假设你不对你draw()
同时传递的形状做任何事情。
void draw(__unsafe_unretained id shapes[], int count)
{
for(int i = 0;i < count;i++) {
id shape = shapes[i];
[shape draw];
}
}
我遇到了同样的问题,阅读这篇文章我解决了我的问题,我尝试了属性 __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];
}
}
另一种简单的方法是在 Xcode 中禁用 ARC。
选择您的项目或目标,然后转到Build Settings并在Apple LLVM compiler 8.1 - Language部分下,您将看到选项Objective-C Automatic Reference Counting。将其设置为NO。