Add:当我在函数中复制块时出现问题:块复制
我已经在使用__block来避免保留自我了。__block类型(Self) bself = self;
但是,当这个块中有另一个块,并且它使用bself时,self仍然会被保留。
如下面的代码所示,第一个bself不会像预期的那样保留self。然而,第二个bself将保持自我。
__block typeof(self) bself = self;
[layer start:param1
completeHanlder:^{
bself.xx = localxx;
dispatch_async(dispatch_get_main_queue(), ^(void) {
... ...
[bself something];
});
}
];
有人知道背后的原因吗?
发布于 2015-08-26 19:59:10
你做错了,但概念上它是正确的,这里是错误:
__block
这是用来让一个强引用在你的区块中。例如,您可以在代码块之外更改值。
正确的方法是使用__weak,它将从您的实例接收弱引用,并防止像这样的强循环引用:
__weak typeof(self) bself = self;
而且因为您创建的__block保留和强引用:)
https://stackoverflow.com/questions/12831423
复制相似问题