<p>1. 引用计数 </p>
- 引用计数是一个简单而有效的管理对象生命周期的方式,不管OC还是swift都采用引用计数这种内存管理方式
- 引用计数可以有效的管理对象的生命周期.当我们创建一个新对象的时候,它的引用计数为1,当一个新的指针指向这个对象的时候,我们将他的引用计数加1,当某个指针不再需要指向这个对象的时候,这个对象的引用计数减1,当这个对象的引用计数为0的时候,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存
- 引用计数真正的用场是对象之间传递与共享数据.
<p>2. 循环引用 </p>
当对象A和对象B,相互引用了对方作为自己的成员变量,只有自己销毁的时,才能将成员变量的引用计数减1,因为对象A的销毁依赖于对象B的销毁, 对象B的销毁依赖于对象A的销毁,这样子就造成了循环引用,即使外部没有指针能够访问他们,但是他们依然不能被释放.
引用计数这种管理内存的方式虽然简单,但他不能很好的解决循环引用的问题,
-
解决循环引用的方法
- 第一个方法是我明确知道这里会存在循环引用,在合适的位置主动断开环中的一个引用.是对象得到回收
- 第二个方式弱引用.例如我们在ARC中的delegate,block
<p> 3. 使用xcode检测循环引用 </p>
-
我们可以使用Instruments工具中的Leaks来检查内存泄露
// 在xcode 中写入这些代码 NSMutableArray *firstArray = [NSMutableArray array]; NSMutableArray *secondArray = [NSMutableArray array]; [firstArray addObject:secondArray]; [secondArray addObject:firstArray];
-
开发Instruments工具选择Leaks
-
选择运行程序的模拟器,然后点击开始(方块变成红点)
-
切换到Leaks这栏,选择'Cycles&Roots'可以看见下图,方便我们找到循环引用的对象