運用block,防止迴圈引用

2021-07-12 02:52:11 字數 335 閱讀 9415

例如:

[self.viewmodel.titlesignal subscribenext:^(nsstring * title) ];

有迴圈引用的問題:self->viewmodel->titlesignal->block->self,這個時候如果我們不做處理的話,那麼self就永遠不會被釋放。正確的做法應該是使用@weakify(self)和@strongify(self):

所以解決迴圈引用的正確寫法如下:

@weakify(self);

[self.viewmodel.titlesignal subscribenext:^(nsstring * title) ];

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