[英]Referring to weak self inside a nested block
假设我已经创建了一个弱自我使用
__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
...
}];
在该块内,如果我嵌套另一个块:
[weakSelf doAnotherBlockOperation:^{
[weakSelf doSomething];
}
它会创建一个保留周期吗? 我是否需要为weakSelf创建另一个弱引用?
__weak typeof(self) weakerSelf = weakSelf;
[weakSelf doAnotherBlockOperation:^{
[weakerSelf doSomething];
}
您的代码将正常工作:弱引用不会导致保留周期,因为您明确指示ARC不要增加弱对象的retainCount。 但是,对于最佳实践,您应该使用弱对象创建对象的强引用。 这不会创建保留周期,因为块中的强指针只会在块完成之前存在(它的唯一范围是块本身)。
__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
...
}
}];
这取决于。
如果实际存储块,则只创建一个保留周期(因为self
指向块,块指向self
)。 如果你不打算存储任何一个块,使用对self
的强引用就足够了---块在执行后将首先被释放,然后它将释放它指向self
的指针。
在您的特定示例中,除非您执行更多未显示的操作,否则您无需创建任何weakerWeakerEvenWeakerSelfs。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.