项目开发工作已经完成,进行测试的时候,发现有内存泄漏问题,以下为个人总结,有不足的地方或者更好的处理方式还请指点!
具体过程如下:
1、用Xcode打开项目,使用快捷键 Command+I 打开instruments工具(也可以在通过Product -> Profile 方式来打开),然后会有如下图窗口弹出:
2、选择Leaks,点击Choose,显示如下界面:
3、点击左上角的红色圆点,这时项目开始启动了,由于leaks是动态监测,所以手动进行一系列操作,可检查项目中是否存在内存泄漏问题:
如图所示,橙色矩形框中所示绿色为正常,如果出现如右侧红色矩形框中显示红色,则表示出现内存泄漏。
4、那怎么定位到出现内存泄漏的代码呢
选中Leaks Checks,在Details所在栏中选择CallTree,并且在右下角勾选Invert Call Tree 和Hide System Libraries,会发现显示若干行代码,双击即可跳转到出现内存泄漏的地方,修改即可。
5、问题解决:
上图为内存泄漏的代码,问题是:
CGMutablePathRef mutablePath = CGPathCreateMutable();
此变量没有手动释放而导致的,在代码片段中此变量使用结束之后,CGPathRelease(mutablePath);添加此句代码即可解决
提醒:
如CGPathCreateMutable(); 中含有create的语句创建的变量,需要手动释放内存
知识补充:
1、内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。