Objective c 为什么Apple标头没有针对N错误**参数的自动释放?

Objective c 为什么Apple标头没有针对N错误**参数的自动释放?,objective-c,cocoa,automatic-ref-counting,out-parameters,Objective C,Cocoa,Automatic Ref Counting,Out Parameters,为什么采用NSError**的苹果方法没有声明为NSError*\uu自动删除* 这似乎暗示他们应该是(?) 例如,NSFileManager.h中的所有例程。但我实际上没有看到任何Apple标题使用了过渡到ARC发行说明中提到的内容: and the method declaration would typically be: -(BOOL)performOperationWithError:(NSError * __autoreleasing *)error; 可能是因为支持遗留代码库,

为什么采用
NSError**
的苹果方法没有声明为
NSError*\uu自动删除*

这似乎暗示他们应该是(?)

例如,NSFileManager.h中的所有例程。但我实际上没有看到任何Apple标题使用了过渡到ARC发行说明中提到的内容:

and the method declaration would typically be:

-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error;

可能是因为支持遗留代码库,其中所有
NSError*error=nil声明将意味着
,因此,如果苹果将
\uu自动删除
放在其中,它将导致每次都创建一个临时的
\uu自动删除
局部变量?我能想到的只有一件事。

指向Objective-C对象的双指针是由。

有趣的文档链接指定的隐式的
\uu自动删除
!这似乎与转换为ARC发行说明文档中所说的不匹配,在该文档中,这意味着将创建一个具有匹配存储类型的临时变量@如果这些变量是由编译器为Pass by Writeback创建的,它们不会影响第二个指针的存储限定符。您引用的文档非常清楚。我已经提交了一份关于向ARC发行说明文档过渡的文档澄清请求,因为与苹果的页眉相比,它写得很混乱。谢谢你的帮助!因此,我猜想将局部变量声明为uu autoreleasing将保存编译器(以及一个局部变量寄存器)。。n错误uu自动释放*错误=nil;[foo methodWithError:&错误];因为LLVM规范和向ARC版本的转换说明表明它将创建临时变量。对吗?@Dad,这样做不值得。让编译器为您处理存储限定符。无论如何,像这样优化是很无聊的。