gpt4 book ai didi

关于按引用传递的 ios

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:05 26 4
gpt4 key购买 nike

根据我目前的理解,“按引用传递”的推荐方式(启用 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;

似乎第二个性能更好?因为它省略了“赋值回”和“自动释放”的过程。但是我很少看到这样声明的函数。使用第二个函数来完成“按引用传递”工作是否更好?

有什么建议或解释吗?提前致谢。

最佳答案

第二个函数不是线程安全的/“延迟安全的”。第一个更正确。

与 block 捕获参数和 performSelector 保留对象的原因相同。


假设调用者 fA 分配了一个对 A 的强引用,然后调用一个 ASYNC 函数 fB。fA 完成了,fB 还没有被调用....所以谁同时保留 A?

关于关于按引用传递的 ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15662338/

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