【发布时间】:2011-01-12 09:46:55
【问题描述】:
如果我声明一个像 ^{ DoSomething; } 这样的块并将其放入实例变量中,如果我要保留它,是否需要 Block_copy()?
【问题讨论】:
-
注意 .. 对于 ARC,这里有一些示例代码:stackoverflow.com/a/20760583/294884
标签: objective-c objective-c-blocks
如果我声明一个像 ^{ DoSomething; } 这样的块并将其放入实例变量中,如果我要保留它,是否需要 Block_copy()?
【问题讨论】:
标签: objective-c objective-c-blocks
是的,您需要复制。不是因为它们是自动释放的,而是因为它们从堆栈开始。请注意,块的行为也类似于常规的 Objective-C 对象,因此您可以使用常规的 copy 消息复制它们:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
或者,如果你有一个块属性:
@property(copy) dispatch_block_t block;
保留在这里没有帮助。
【讨论】:
copy,请使用release。如果您使用Block_copy(),请使用Block_release()。不要混合它们。
Block_copy() 和autorelease 是否安全?你应该只使用autorelease和copy吗?