这是代码:
blk_t blk;
{
id array = [[NSMutableArray alloc] init];
blk = ^(id obj) {
[array addObject:obj];
NSLog(@"array count = %ld", [array count]);
};
}
blk([[NSObject alloc] init]);
blk([[NSObject alloc] init]);
blk([[NSObject alloc] init]);
据说应用程序将被终止,因为块不会从堆栈复制到堆和自动变量'数组'已被释放和处置,但在我的测试中,它的工作没有终止。问题是什么?我对这段代码中的内存管理如何工作感兴趣,谁能解释一下呢?
答案 0 :(得分:0)
像
这样的块文字^(id obj) { ... }
仅在其封闭范围内有效。在将文字指定为blk后立即离开封闭范围,它将变为无效。
请勿在范围内使用它(删除{})或使用复制方法。
顺便说一句。将一个可变数组分配给id类型的变量是一种糟糕的样式,并且会在某些时候严重阻止你。