根据我目前的理解,“通过引用”的推荐方式(启用 ARC)如下:
-(void)somefunc:(someclass **)byref;
// and 'someclass **' should be inferred to 'someclass * __autoreleasing *'
// am i right?
//or we could just explicitly define it like
-(void)somefunc:(someclass * __autoreleasing *)byref;
但是,从这个线程的答案,Handling Pointer-to-Pointer Ownership Issues in ARC。
似乎 -(void)somefunc:(someclass *__strong *)byref 也可以解决问题(在上述链接的 demo2 中)。
1.-(void)somefunc:(someclass * __autoreleasing *)byref;
2.-(void)somefunc:(someclass *__strong *)byref
对于第一个,正如 Apple 所记录的,它应该由编译器隐式重写,如下所示:
NSError * __strong error;
NSError * __autoreleasing tmp = error;
BOOL OK = [myObject performOperationWithError:&tmp];
error = tmp;
看来第二个的性能更好?因为它省略了“赋值回”和“自动释放”的过程。但我很少看到这样声明的函数。使用第二个函数来完成“按引用传递”工作是更好的方法吗?
有什么建议或解释吗?提前致谢。