iOS - 你真的了解 内存泄露吗?
2017-10-16 本文已影响0人
素还真人
Hi,dears
本文主讲一下,最近对iOS内存泄露方面的总结。
Memory Leak到底是因为什么引起?
先看看什么是内存泄漏吧!
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
是堆内存!!!
我们知道,一个对象被创建出来,是需要再手动去释放该对象指针与所指空间。
其实还有种情况,系统帮我们释放,有的区域,是系统管理的,比如栈(stack)中。
所以:我们要根据iOS的内存管理规则、计算的内存管理规则一起来研究,两者结合,才能透彻什么样的case会内存泄露。
回到iOS中,是以对象的引用计数规则来管理内存的。
常见有:对象间循环引用、对象被常驻内存对象(如:单例,全局静态变量)强引用两种原因,引起无法释放。
根据计算机内存管理和ios内存管理规则,我们了然,
首先得考虑该对象的所在内存区域,系统不会去自动清理的内存区域(无人管地带),然后才轮到我们手动管理区域。
比如,对象A *a是函数中的临时变量,那它就是会栈中,函数执行结束,A就会释放。如果A强引用了某B *b,那么a是不会长久影响到b的释放。
总结:切莫再跟我说,循环引用导致内存泄露。iOS中,应该是看一个对象,是被什么强引用,才能正确分析它到底会不会释放!
我之前也写过一篇博客,http://www.jianshu.com/p/611fd37dd97a,可以去看看,就可以完全理解,iOS内存泄露了。