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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容