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!

你可能感兴趣的:(block导致循环引用的问题)