Possible Duplicate:
Storing Blocks in an Array
我正在编写一个应用程序,有时根据某些条件,我想在发生某些事件后运行某些代码。此代码可以在多个位置访问函数中的变量,当需要执行此代码时,这些变量不在作用域内。 是否可以将这些语句作为 block 存储在数组中,并在事件发生时一一执行它们。 如果是,如何访问先前范围的变量?
我想将其作为闭包数组。
最佳答案
当您将 block 存储在数组中时,您可以使用 block 上的 Block_copy
函数将 block 移动到堆中,并在使用完毕后使用 Block_release
函数。 Block_copy
会将执行 block 变量移动到堆中,这样当您继续运行应用程序时,变量就不会在堆栈内存中被覆盖。
使用 Block_copy 的示例。您需要先进行桥接
在 header 中为 block 类型定义 typedef,如下所示。此类型示例没有参数。
typedef void (^myBlockType)();
当你想向数组添加一个 block 时,你可以像这样复制该 block :
- (void)addBlock:(void (^)())aBlock
{
[mutableBlockArray addObject:(__bridge myBlockType)Block_copy((__bridge void *)aBlock)];
}
当你完成该 block 后,你需要像这样释放它(ARC 不需要):
id finishBlock = [mutableBlockArray objectAtIndex:index]
Block_release((__bridge void *)finishBlock);
关于ios - 是否可以将一系列 block 代码存储在数组中并在需要时执行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462045/