假设我已经创建了一个 weak self using
__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
...
}];
在该 block 内,如果我嵌套另一个 block :
[weakSelf doAnotherBlockOperation:^{
[weakSelf doSomething];
}
它会创建一个保留周期吗?我是否需要创建另一个对 weakSelf 的弱引用?
__weak typeof(self) weakerSelf = weakSelf;
[weakSelf doAnotherBlockOperation:^{
[weakerSelf doSomething];
}
最佳答案
您的代码可以正常工作:弱引用不会导致保留循环,因为您明确指示 ARC 不要增加弱对象的 retainCount。然而,为了获得最佳实践,您应该使用弱引用创建对象的强引用。这也不会创建保留循环,因为 block 中的强指针只会存在到 block 完成(它的唯一作用域是 block 本身)。
__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
...
}
}];
关于ios - 在嵌套 block 中引用 weak self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17104634/