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