首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套块的__block变量行为

嵌套块的__block变量行为
EN

Stack Overflow用户
提问于 2013-05-07 14:08:48
回答 1查看 604关注 0票数 0

嵌套块中的__block变量存在问题。我的问题是,像下面这样的代码应该起作用吗?

代码语言:javascript
运行
复制
__block NSString* s = nil;
[self methodWithBlock:^
 {
    s = [self methodThatReturnsAnAutoreleasedString];
    [self methodWithBlock:^
     {
         [NSLog @"%d", s.length];
     }];
 }];

我假设内部块保留了s,但在我的代码中似乎并非如此。在访问内部块中的s时,我会收到一条“发送到解除分配实例的消息”。如果我在分配它(s = [[self methodThatReturnsAnAutoreleasedString] retain];)时保留s,它就能正常工作。

当然,这不是我的实际代码,这更复杂,但我只是想知道,这个最小的例子应该工作得很好。如果是这样的话,我需要在其他地方寻找我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 14:46:41

(我假设你不使用ARC。)来自过渡到ARC发行说明

在人工参考计数模式下,__block id x;具有不保留x的效果。

因此,您的假设是错误的,块不保留s。如果methodWithBlock异步工作,则必须保留它。

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

https://stackoverflow.com/questions/16421152

复制
相关文章

相似问题

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