首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这段代码中的块的内存管理如何

问这段代码中的块的内存管理如何
EN

Stack Overflow用户
提问于 2014-09-11 18:39:58
回答 1查看 45关注 0票数 0

代码如下:

代码语言:javascript
复制
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的情况下工作是问题所在吗?我对这段代码中的内存管理是如何工作的很感兴趣,谁能解释一下呢?

EN

回答 1

Stack Overflow用户

发布于 2014-09-11 18:52:59

块字面量,如

代码语言:javascript
复制
^(id obj) { ... }

仅在其封闭范围内有效。在将文本赋值给blk之后,立即离开封闭作用域,它就变得无效。

不要在作用域中使用它(删除{})或使用copy方法。

顺便说一句。将可变数组赋值给id类型的变量是一种糟糕的风格,而且在某些时候会让你陷入困境。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25785317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档