gpt4 book ai didi

ios - For 循环中的 ObjC/ARC ByRef

转载 作者:行者123 更新时间:2023-11-29 11:04:14 25 4
gpt4 key购买 nike

我有一个 for 循环,然后将迭代对象传递给一个带有 byref 参数的方法并得到以下错误:

Implicit conversion of an Objective-C pointer to 'FOO *__autoreleasing *' is disallowed with ARC

和警告:

Incompatible pointer types sending 'Foo *const __strong' to parameter of type 'Foo *__autoreleasing *'

循环:

for (Foo *obj in objArray) {
FooTableCell *newCell = [self createFooCellWithItem:obj];
}

方法签名:

-(FooTableCell *)createFooCellWithItem:(Foo **)newObj;

我已按照 this SO q&a 中的建议进行操作无济于事。

编辑

在 obj 之前加上 & 会出现以下错误:

Sending 'Foo *const __strong *' to parameter of type 'Foo *__autoreleasing *' changes retain/release properties of pointer

最佳答案

作为聊天中讨论和发现的摘要,这里有一些注意事项。

看来您正在尝试:

  1. 快速遍历数组;而

  2. 替换从循环内部调用的方法中的每个数组元素;

编译器不允许这样做。它至少会打破关于不修改枚举内数组的快速枚举契约。

因此,我的建议是在您的 shouldAddObject 方法中明确指定一个输出参数,例如:

NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:[objArray count]]; 
for (Foo *obj in objArray) {
Foo* newObject = nil;
RETYPE* ret = [self shouldAddObject:obj newObject:&newObject];
[newArray addObject:newObject];
}

关于ios - For 循环中的 ObjC/ARC ByRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com