双指针作为Objective-C块参数

双指针作为Objective-C块参数,第1张

概述是否有可能(如果是这样,安全)创建/使用以双指针作为参数的块? 例如: – (void)methodWithBlock:(void(^)(NSError ** error))block; 其他背景,研究和问题: >我正在使用ARC. >当我声明上面的方法并尝试调用它时,XCode自动完成我的方法调用,如下所示:[self methodWithBlock:^(NSError * __ autorel 是否有可能(如果是这样,安全)创建/使用以双指针作为参数的块?

例如:

– (voID)methoDWithBlock:(voID(^)(NSError ** error))block;

其他背景,研究和问题:

>我正在使用ARC.
>当我声明上面的方法并尝试调用它时,XCode自动完成我的方法调用,如下所示:[self methoDWithBlock:^(NSError * __ autoreleasing * error){}];
__autoreleasing在这里是什么意思,为什么要添加它?我认为它与ARC有关.
>如果这是可行且安全的,那么指针仍然可以在块中取消引用,就像在其他地方一样吗?
>一般来说,做我正在描述的事情和简单地将双指针作为方法参数传递之间有什么重要区别(例如 – (voID)methoDWithDoublePointer:(NSError **)error;)?应该考虑哪些特殊考虑因素(再次假设这是可能的)?

解决方法 答案是肯定的和没有…

在基类级别传递指向块指针的指针与将它们传递给方法没有什么不同;并且,通常的条件是你的指针必须有效,完全没问题.

然而,__autoreleasing在这里非常重要,并且与ARC和pass-by-writeback捆绑在一起.是否使用块将按预期工作将取决于上下文,因为编译器在传递类型NSError * __autoreleasing *的参数作为pass-by-writeback实现的一部分时经常使用隐藏变量.

如果pass-by-writeback不是您需要的或不适合的,您可能希望声明阻止采用不同的类型,例如NSError * __strong *.阅读this answer,它解释了引擎盖下发生的事情,它可以帮助您确定在您的上下文中块声明是否良好.

总结(a)声明块是好的,但是(b)你需要了解它是如何调用的,可能需要更改签名.

总结

以上是内存溢出为你收集整理的双指针作为Objective-C块参数全部内容,希望文章能够帮你解决双指针作为Objective-C块参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1240137.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存