Objective c 块中块导致自身被保留,\块不工作
添加:复制函数内的块时出现问题: [正楷] 我已经在使用_u块来避免保留自我。 __块类型(self)bself=self 但是,当此块中存在另一个块并且它使用bself时,self仍将保留 如下面的代码所示,第一个bself将不会像预期的那样保留自我。然而,第二个自我将保留自我Objective c 块中块导致自身被保留,\块不工作,objective-c,ios,block,Objective C,Ios,Block,添加:复制函数内的块时出现问题: [正楷] 我已经在使用_u块来避免保留自我。 __块类型(self)bself=self 但是,当此块中存在另一个块并且它使用bself时,self仍将保留 如下面的代码所示,第一个bself将不会像预期的那样保留自我。然而,第二个自我将保留自我 __block typeof(self) bself = self; [layer start:param1 completeHan
__block typeof(self) bself = self;
[layer start:param1
completeHanlder:^{
bself.xx = localxx;
dispatch_async(dispatch_get_main_queue(), ^(void) {
... ...
[bself something];
});
}
];
有人知道背后的原因吗?你做错了,但这是对的,这里是错误: __挡块 这用于在块内提供强引用。例如,可以在块外更改值 正确的方法是使用_弱,它将从实例接收弱引用,并防止强循环引用,如下所示:
__weak typeof(self) bself = self;
而且因为您创建的_块保留和强引用:)我不知道它背后的原因,但您可以始终使用与在外部块中避免自引用相同的技巧,在外部块中声明一个
bself2
,在内部块中引用。@dasblinkenlight我已经尝试过,但仍然相同,您是否尝试将\uu块
更改为\uu弱
?由于您不打算修改变量,\uuu-weak
可能会更好。嗯,我只是尝试了一下,它不会阻止阻塞。现在的重新计数是3。每个bself用法保留一次。它在ARC下需要较弱,ARC仍将保留块变量。