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

2016-07-14  本文已影响174人  Kakarrot

定时器(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。

上一篇下一篇

猜你喜欢

热点阅读