Apple倾向于提供这样的例子:
NSError __strong *error = nil;
或
-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error;
如果我能这样做,我会发现它更具可读性和逻辑性:
__strong NSError *error = nil;
-(BOOL)performOperationWithError:(__autoreleasing NSError**)error;
快速测试显示编译器没有抱怨我的编写方式。不管怎么说,我做错了,或者写这样就好了吗?
答案 0 :(得分:4)
不,所有权限定符的位置根本不重要。由于所有权限定符仅对指针到对象类型有意义,因此您的意图永远不会模糊。无论你把它放在何处,编译器都可以很容易地弄清楚你的意图是什么,所以ARC确实如此。
如果您可以访问iOS Apple开发者论坛,那么您可以在https://devforums.apple.com/message/458606看到我向Apple工程师提出同样问题的位置。
答案 1 :(得分:1)
如果编译器没有抱怨,并且由于它没有得到任何新的泄漏,那么它是好的。你也可以从一种方式与另一种方式比较你的汇编输出,看看是否有任何差异(使用diff
工具,而不是TextEdit,或者你将整晚都在这里:P)
如果asm或二进制文件是相同的,那么编译器对它的处理方式完全相同。你也可以在之前和之后用仪器进行测试,看看是否有任何泄漏,以确保它仍然正确处理内存。