ARC所有权限定符的位置是否重要?

时间:2012-01-14 19:23:10

标签: objective-c ios macos syntax automatic-ref-counting

Apple倾向于提供这样的例子:

NSError __strong *error = nil;

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

如果我能这样做,我会发现它更具可读性和逻辑性:

__strong NSError *error = nil;


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

快速测试显示编译器没有抱怨我的编写方式。不管怎么说,我做错了,或者写这样就好了吗?

2 个答案:

答案 0 :(得分:4)

不,所有权限定符的位置根本不重要。由于所有权限定符仅对指针到对象类型有意义,因此您的意图永远不会模糊。无论你把它放在何处,编译器都可以很容易地弄清楚你的意图是什么,所以ARC确实如此。

如果您可以访问iOS Apple开发者论坛,那么您可以在https://devforums.apple.com/message/458606看到我向Apple工程师提出同样问题的位置。

答案 1 :(得分:1)

如果编译器没有抱怨,并且由于它没有得到任何新的泄漏,那么它是好的。你也可以从一种方式与另一种方式比较你的汇编输出,看看是否有任何差异(使用diff工具,而不是TextEdit,或者你将整晚都在这里:P)

如果asm或二进制文件是相同的,那么编译器对它的处理方式完全相同。你也可以在之前和之后用仪器进行测试,看看是否有任何泄漏,以确保它仍然正确处理内存。

相关问题