關於block 迴圈引用 weakSelf

2021-07-07 02:57:03 字數 705 閱讀 3816

block**塊裡用到的東西,比如主線程裡的全域性變數,區域性變數,ui等,block都會對它指向乙個strong指標。也就是說,區域性變數所在的區域性**執行完後,區域性變數不會釋放,直到block消失,它才釋放。

這個不太好,這樣如果block**裡面有self.something,而block又儲存在strong的全域性變數裡,會導致block對self乙個strong指標,self對block又有乙個strong指標,就導致了memory circle。相應的解決辦法是:

__weak myclass *weakself = self;

使得block指向self乙個弱指標。self指向block仍舊是強指標。這樣乙個是弱的便解決問題了。

#import "viewcontroller.h"

typedef void(^myblock)();

@inte***ce viewcontroller ()

@property (nonatomic,copy) myblock block;

@property (nonatomic,copy) nsstring *name;

@end

@implementation viewcontroller

- (void)viewdidload;}

- (void)didreceivememorywarning

@end

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...

BLOCK迴圈引用

何時block才會迴圈引用 為什麼block會迴圈引用 我們很多行為會導致block的copy,而當block被copy時,會對block中用到的物件產生強引用 arc下 或者引用計數加一 mrc下 如下 property nonatomic,readwrite,copy completionblo...