通常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!