美文网首页
循环引用

循环引用

作者: 小五92 | 来源:发表于2018-11-01 11:42 被阅读81次

由于iOS采用的引用计数,来管理内存,如果相互强引用持有,则无法释放,从而造成内存泄漏。

避免循环引用的规则

1、对象不应该持有它的“父对象”,应使用weak 引用指向它的“父对象”。
这里的父对象,并不单只对象父类的对象。例如:相册和图片

@class HPPhoto
@interface HPAlbum :NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy)HPPhoto *coverPhoto;

@end

@interface HPPhoto :NSObject

@property (nonatomic, strong) HPAlbum *album;
@property (nonatomic, copy) NSString *title;

@end

由于相册和照片相互强引用持有,无法释放。这里可把相册看作图片的父亲,从而将HPPhoto中的HPAlbum改为弱引用。

2、连接对象不应该持有他们的目标对象,目标对象的角色是持有者:连接对象包括以下几种:

  • 使用委托的对象。委托应该被当作目标对象。
  • 包含目标和action的对象。
  • 观察者模式中 的被观察者。观察者就是持有者。

循环引用的常见场景

1、委托。解决办法:将使用委托的对象中的delegate设为弱引用。
2、block块。解决办法:在块外将self弱引用,在块内将弱引用的self再强引用。
3、线程和计时器。
4、观察者模式。

相关文章

  • 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/yvgtxqtx.html