ARC - 为什么对象指针在函数定义中需要显式的所有权类型?

Bin*_*man 3 xcode objective-c automatic-ref-counting

void testFunction (id testArgument[]) {
    return;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误"必须明确描述对象数组参数的预期所有权".为什么ARC需要我在testArgument数组中指定对象的所有权类型?

bbu*_*bum 6

为了扩展Jeremy的答案,ARC在设计时有两个主要目标:

  • 在纯Objective-C代码中使内存管理尽可能全自动,同时保持或最大化效率(事实上,ARC可以比手动保留版本更高效).

  • 当跨越C和Objective-C之间的边界时,需要完全特定的内存管理意图声明.

同样,ARC的实施也非常保守.也就是说,在传统上"未定义"行为的任何地方,ARC都会发出警告.

因此,在这种情况下,需要声明声明,以便编译器可以将一致且特定的一组内存管理规则应用于数组的内容.