说说iOS与内存管理(中)
0. 内存工具 针对iOS开发,我们所能使用的内存排查工具选择其实并不算特别多。最主要的调试工具就是Instruments。然而,如果仔细探查细节,Instruments还是集成了很多不错的调试模板/Library的。 本文针对如下几类应用场景,对通用的调试方法做基本介绍: 最基本最常用的内存问题场景——内存泄露、过度释放 malloc相关的堆内存分配问题排查相关工具 其它内存工具 1. 内存泄露与过度释放 我们应该都知道,iOS开发过程中,使用Objective-C分配的堆内存都是通过引用计数来做保留和释放的。一块内存初始分配,引用计数为1,此后每新增一个强引用,引用计数增加1;释放正好相反,每一次release,引用计数减1,直到为0,对象所用内存被真正free掉,以被再次复用。然而,实际开发当中,总有一些原因导致引用计数无法按正常逻辑减少到0,或者减少到0之后仍然被调用release,前者是内存泄露,后者则是过度释放。 当内存泄露发生时,运行的App不会直接第发生明显问题,但废弃内存得不到回收,在长时间持续运行后,App进程会由于可用内存不断变低而被kill或带来其它隐患。 避免...