簡體   English   中英

在塊中保留自我的危害是什么?(Objective-C,GCD)

[英]What's the harm of retain self in block?(Objective-C, GCD)

在許多關於如何使用塊和GCD的指南中,總是提到一個提示:不要在塊中保留self。

細節是在定義一個塊時,如果你引用self或者我自己的ivar,那么block會保留self。 因此,解決方法是使用__block修飾符來獲取weakSelfweakIvar

但是不這樣做有什么害處呢? 如果塊保留自我,它應該在塊完成時釋放自我(我是否正確?)。 因此,最終自我的參考計數是平衡的。 我知道如果自我保留了塊並且塊保留了自身,那么它將是一個保留周期。塊和self都將被解除分配。 但是如果使用GCD,自我不保留塊,為什么不讓塊保留自己?

保留自我沒有害處,除非阻擋留在身邊。 如果您正在使用GCD執行塊然后將其刪除,那么這很好。 如果self有一個對它保持的塊的引用( self.someBlock = ^{self.x = 2;} ),這只是一個問題,因為那時你有一個保留周期。

我個人喜歡在GCD中保留self(如果使用)的塊,因為你無法真正控制塊何時執行且無法取消,因此如果不保留self,則可以在取消分配后執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM