gpt4 book ai didi

ios - 将 Objective-C block 定义为属性 - 最佳实践

转载 作者:技术小花猫 更新时间:2023-10-29 10:13:34 27 4
gpt4 key购买 nike

我最近遇到了一个 Apple document显示 block 的以下属性声明:

@interface XYZObject : NSObject
@property (copy) void (^blockProperty)(void);
@end

此外,这篇文章指出:

Note: You should specify copy as the property attribute, because a block needs to be copied to keep track of its captured state outside of the original scope. This isn’t something you need to worry about when using Automatic Reference Counting, as it will happen automatically, but it’s best practice for the property attribute to show the resultant behavior. For more information, see Blocks Programming Topics.

我还阅读了建议的 Blocks Programming Topics但在那里没有找到任何相关内容。

我仍然很好奇为什么将 block 属性定义为“复制”是最佳做法。如果您有好的答案,请尝试区分 ARC 和 MRC 之间的差异(如果有的话)。

谢谢

最佳答案

默认情况下, block 是在堆栈上创建的。这意味着它们只存在于它们被创建的范围内。

如果您稍后想访问它们,则必须通过向 block 对象发送 copy 消息将它们复制到堆中。一旦 ARC 检测到需要在其创建范围之外访问 block ,ARC 就会为您执行此操作。作为最佳实践,您将任何 block 属性声明为副本,因为这是它应该处于自动内存管理下的方式。

阅读Stack and Heap Objects in Objective-C由 Mike Ash 提供有关堆栈与堆的更多信息。

关于ios - 将 Objective-C block 定义为属性 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649661/

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