美文网首页
block 循环引用

block 循环引用

作者: 默简 | 来源:发表于2019-08-19 10:09 被阅读0次

block循环引用原因:一个对象A有Block类型的属性,从而持有这个block,如果block的代码块中使用到这个对象A,或者仅仅是用用到A对象的属性,会使block也持有A对象,导致两者互相持有,不能在作用域结束后正常释放。

解决原理:对象A照常持有Block,但Block不能强引用持有对象A以打破循环。

解决方法

方法一: 对block内要使用的对象A使用_*_weak*进行修饰,block对对象A弱引用打破循环。

方法二:对block内要使用的对象A使用__block进行修饰,并在代码块内,使用完__block变量后将其设为nil,并且该block必须至少执行一次

方法三:将在block内要使用到的对象(一般为self对象),以block参数的形式传入,block就不会捕获该对象,而将其作为参数使用,其生命周期系统的栈自动管理,不造成内存泄露。

相关文章

网友评论

      本文标题:block 循环引用

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