首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >block中的block导致自身保留,__block不工作

block中的block导致自身保留,__block不工作
EN

Stack Overflow用户
提问于 2012-10-11 10:45:44
回答 1查看 236关注 0票数 0

Add:当我在函数中复制块时出现问题:块复制

我已经在使用__block来避免保留自我了。__block类型(Self) bself = self;

但是,当这个块中有另一个块,并且它使用bself时,self仍然会被保留。

如下面的代码所示,第一个bself不会像预期的那样保留self。然而,第二个bself将保持自我。

代码语言:javascript
运行
复制
            __block typeof(self) bself = self;

            [layer start:param1
                  completeHanlder:^{
                      bself.xx = localxx;

                      dispatch_async(dispatch_get_main_queue(), ^(void) {
                          ... ...
                          [bself something];
                      });
                  }
             ];

有人知道背后的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-26 19:59:10

你做错了,但概念上它是正确的,这里是错误:

__block

这是用来让一个强引用在你的区块中。例如,您可以在代码块之外更改值。

正确的方法是使用__weak,它将从您的实例接收弱引用,并防止像这样的强循环引用:

代码语言:javascript
运行
复制
 __weak typeof(self) bself = self;

而且因为您创建的__block保留和强引用:)

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

https://stackoverflow.com/questions/12831423

复制
相关文章

相似问题

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