簡體   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