美文网首页程序员
block导致循环引用的问题

block导致循环引用的问题

作者: 心情的蛊惑 | 来源:发表于2017-03-24 10:05 被阅读72次

通常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导致循环引用的问题

    本文链接:https://www.haomeiwen.com/subject/rdjxwttx.html