代码如下:
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]);据说应用程序将被终止,因为块不会从堆栈复制到堆,自动变量'array‘已被释放和处理,但在我的测试中,它在没有terminated.what的情况下工作是问题所在吗?我对这段代码中的内存管理是如何工作的很感兴趣,谁能解释一下呢?
发布于 2014-09-11 18:52:59
块字面量,如
^(id obj) { ... }仅在其封闭范围内有效。在将文本赋值给blk之后,立即离开封闭作用域,它就变得无效。
不要在作用域中使用它(删除{})或使用copy方法。
顺便说一句。将可变数组赋值给id类型的变量是一种糟糕的风格,而且在某些时候会让你陷入困境。
https://stackoverflow.com/questions/25785317
复制相似问题