循环引用,顾名思义就是开发过程中两个对象之间互相引用,形成一个环路。在MRC时代,内存都是程序员手动管理,每一个对象、实例都需要程序员通过retain release操作去控制引用计数,这种时候虽然更加繁琐,但是内存都在程序员的控制范围内。但是在使用ARC的时候,由于内存是ios 在编译期通过系统的判断去动态的将内存控制代码(retain release delloc)添加到代码中的合适位置。虽然很大程度上解决了开发人员,使得开发人员可以将精力更多的放到app功能的开发中,但是由于内存管理对程序员的不可控,使得在开发人员不知情的情况下发生内存泄漏的情况很容易发生。
如果程序中产生了循环引用的问题,会由于对象之间互相引用,导致两者都得不到释放,从而导致内存泄漏。
block在ios开发过程中使用的情况非常多,block块中使用块外的变量、对象的情况也非常多,当我们在使用block的时候发生这样的情况,就会产生内存泄露。
某对象是某block的拥有者,而block中又使用了此对象,这是很经典的一个情况,解决的办法一个是将此对象nil,另一中是解决循环引用通用的方法。
将循环引用的一方改为弱引用另一方 :__weak typeof(self) weakSelf=self; 等