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