gpt4 book ai didi

objective-c - __autoreleasing 错误 :(NSError *__autoreleasing *)outError

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:41 24 4
gpt4 key购买 nike

我在返回错误的 Apple 函数中注意到了这种模式

error:(NSError *__autoreleasing *)outError

我理解它的意思,它是指向指针的指针,用于执行结果(仅使用 * 只会更改本地复制的变量,而不是外部变量)但我担心:

__autoreleasing

如果我遗漏它会怎样?我会漏水吗?为什么有必要?

最佳答案

在定义一个函数时,您不必显式指定 __autoreleasing返回一个对象,例如

-(BOOL)doSomething:(NSError **)error;

ARC 编译器自动插入__autoreleasing。这在Clang/ARC文档:

4.4.2 Indirect parameters

If a function or method parameter has type T*, where T is an ownership-unqualified retainable object pointer type, then:

  • if T is const-qualified or Class, then it is implicitly qualified with __unsafe_unretained;
  • otherwise, it is implicitly qualified with __autoreleasing.

Xcode代码补全也知道这一点并显示 (NSError *__autoreleasing *)error


调用这样的函数时,ARC 编译器也会自动执行“正确的事情”,所以你可以打电话

NSError *error;
BOOL success = [self doSomething:&error];

"Transitioning to ARC Release Notes" 中所述,编译器插入一个临时的__autoreleasing 变量:

NSError *error;
NSError * __autoreleasing tmp = error;
BOOL success = [self doSomething:&tmp];
error = tmp;

(有关详细信息,您可以阅读 4.3.4“通过写回传递给输出参数”Clang/ARC 文档。)

关于objective-c - __autoreleasing 错误 :(NSError *__autoreleasing *)outError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268576/

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