關於block的迴圈引用 心得

2022-08-31 15:24:19 字數 385 閱讀 9559

block 

在 block **中 一般不要用到外面東西

如果在 block **中必須用到外面的東西    (block 中有**設定為self)

最後 會產生強引用   結果無法釋放

結決方法 (防止block迴圈引用) : 先把它弄出來宣告為弱指標

上面三種方法 都要在block上面寫 意思是:

但這樣同時存在乙個問題   __weak弱引用隨時可能被銷毀

只有self

直接強引用

block

,才會出現迴圈引用  (記憶體不能釋放)

block

的管理以及執行緒的建立和銷毀是由佇列負責的,直接在

block

中使用self

沒有關係!

關於block 迴圈引用 weakSelf

block 塊裡用到的東西,比如主線程裡的全域性變數,區域性變數,ui等,block都會對它指向乙個strong指標。也就是說,區域性變數所在的區域性 執行完後,區域性變數不會釋放,直到block消失,它才釋放。這個不太好,這樣如果block 裡面有self.something,而block又儲存在...

block 迴圈引用

結論 block作為成員變數,內部引用self的成員變數,必須使用self 弱引用 block作為區域性變數,無論怎樣寫,都不會對self造成強引用 block為變數 1 block為成員變數 typedef nsstring blockcc void inte ce twoviewcontroll...

block迴圈引用

底層原始碼 typedef void ghblock void struct main block impl 0 static void main block func 0 struct main block impl 0 cself static void main block copy 0 st...