美文网首页
循环引用

循环引用

作者: CRAZYBADAM | 来源:发表于2017-12-12 11:27 被阅读70次

循环引用产生的原因是对象的互相引用导致产生了环释放不了内存。
正常对象持有释放顺序是B对象是A对象的属性,若对A发送release消息,致使A引用计数为0,则会dealloc A对象,而在A的dealloc的同时,会向B对象发送release消息,B被释放,内存被正确回收。不正确的对象持有,A对象持有B对象,B对象持有A对象,A对象想要释放需要它的持有者B对象发送release消息,但是B对象释放也需要它的持有者A发送relesase消息,都在互相等待持有者发送release消息,就是循环引用,造成内存无法释放。
如何接触循环引用,例子。
delegate为什么要用week修饰。
如果delegate用strong修饰,在B中A.delegate = B; 由于A的属性delegate持有B,等于A持有B,但是B中又持有A,就造成了环,由于都是强引用,所以释放不了,只有把delegate改成弱引用,才能打破这个环。
block中调用self的属性为什么要用__weak typeof(self) weakSelf = self。
由于self持有block,而如果block中在持有self的话,就形成了环,打破环的话就需要引用self的时候弱引用,让它得以释放。

相关文章

  • 4-8 循环引用

    3种循环引用 自循环引用 相互循环引用 多循环引用 Block的循环引用 NSTimer 的循环引用 破除循环引用...

  • 循环引用的相关问题

    1、循环引用的种类(1)自循环引用(2)相互循环引用(3)多循环引用 如何破除循环引用?(1)避免产生循环引用(2...

  • iOS 内存管理面试题(循环引用)

    循环引用 循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。 如何解决循环引用? 1、避免产生循环引用...

  • 内存管理-循环引用

    三种类型循环引用 自循环引用 相互循环引用 多循环引用 自循环引用 假如有一个对象,内部强持有它的成员变量obj,...

  • iOS 循环引用

    1. 循环应用的分类: 自循环引用; 相互循环引用; 多循环引用; 自循环引用: 一个对象中有一个成员变量A; 如...

  • iOS开发 循环引用的几种场景

    delegate 循环引用如果delegate使用strong修饰容易引起循环引用 block 循环引用block...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • 避免Block的循环引用

    避免Block的循环引用 什么是循环引用,什么时候发生循环引用 1 循环引用就是当self 拥有一个block的...

  • iOS基础 Block解决循环引用

    block 循环引用循环引用 A对象持有B,B又持有A,互相强引用 解决循环引用问题:ARC 和MRC ARC:...

  • 2019-03-07 对WKWebView中的循环引用的理解

    WKWebView的这个循环引用很像定时器的循环引用。定时器的循环引用是因为系统runloop循环 强引用了执行...

网友评论

      本文标题:循环引用

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