通常block中使用self,都會引起循環(huán)引用。
1)但是并不代表所有的block中使用self都會造成循環(huán)引用。
比如:1>系統(tǒng)自帶UIView的block中(UIView的動畫),控制器可以被銷毀,就不會引起循環(huán)引用。
2>除了系統(tǒng)自帶的block,afn中的block中使用self,也不會循環(huán)引用。
2)自定義的block,容易引起循環(huán)引用,但不一定全都引起。循環(huán)引用發(fā)生的條件就是持有這個block的對象,被block里邊加入的對象持有。(a控制器中調(diào)用a的自定義block,容易循環(huán)引用,a中調(diào)用b的自定義block不會引起)
3)使用通知(NSNotifation),調(diào)用系統(tǒng)自帶的Block,在Block中使用self --> 會發(fā)生循環(huán)引用。
[[NSNotificationCenter defaultCenter] addObserverForName:@"" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
}];
A發(fā)通知,b接收,使用上述通知方法,block中用self,會引起循環(huán)引用。
解決辦法-->weakSelf!