美文网首页
常见的出现内存循环引用的场景

常见的出现内存循环引用的场景

作者: Kakarrot | 来源:发表于2016-07-14 08:13 被阅读174次

    定时器(NSTimer):我们在使用NSTimer时经常会作为一个类的属性使用,

    而NSTimer在初始化的时候回指定self为target.这就造成了self-->NSTimer-->self的循环引用的情况。另外在NSTimer一致处于validata状态时其引用计数器一直是大于0的,所以在不使用定时器以后要调用invalidata移除定时器。

    Block的使用

    block在引用外部的变量是,会对外部变量进行copy操作。在(ARC)模式下会对变量进行强引用,(MRC)模式下变量retainCount加1。当一个类把block作为成员变量时,在block内部使用了这个类本身。造成self-->block-->self或者self-->block-->类的成员变量循环引用的情况。

    解决办法:在给block赋值时在外部用__blockmySelf = self;用__block修饰使用到的类。

    代理(delegate)

    解决办法,在使用代理是在(ARC)模式下使用assign在(MRC)模式下使用weak。

    相关文章

      网友评论

          本文标题:常见的出现内存循环引用的场景

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