为什么要将bloc属性声明为copy?
typedef void(^Thunk)(void);
@property (nonatomic, copy) Thunk block;
为什么需要复制块对象?
答案 0 :(得分:3)
因为在文件堆栈上创建了块文字,并且在函数退出时将被销毁。当保持一个块时,有必要复制它。
答案 1 :(得分:2)
如果您要在定义范围之外使用块,则需要复制它,因为它会将其复制到堆中。原始块在堆栈上分配,因此当它超出范围时将被解除分配,即在完成定义的方法或代码块时。大多数情况下,块用于异步活动,因此通常需要执行此操作。
答案 2 :(得分:1)
在堆栈上创建一个块,并将状态捕获到堆栈分配。您需要执行以下复制:
...这样你就可以安全地使用它在其中创建的词法范围之外的块。