繁体   English   中英

引用嵌套块内的弱自我

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM