block導致循環引用的問題

通常block中使用self,都會引起循環引用。

1)但是并不代表所有的block中使用self都會造成循環引用。

比如:1>系統自帶UIView的block中(UIView的動畫),控制器可以被銷毀,就不會引起循環引用。

2>除了系統自帶的block,afn中的block中使用self,也不會循環引用。

2)自定義的block,容易引起循環引用,但不一定全都引起。循環引用發生的條件就是持有這個block的對象,被block里邊加入的對象持有。(a控制器中調用a的自定義block,容易循環引用,a中調用b的自定義block不會引起)

3)使用通知(NSNotifation),調用系統自帶的Block,在Block中使用self --> 會發生循環引用。

[[NSNotificationCenter defaultCenter] addObserverForName:@"" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {

}];

A發通知,b接收,使用上述通知方法,block中用self,會引起循環引用。

解決辦法-->weakSelf!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容