Instruments检测解决iOS内存泄漏

项目开发工作已经完成,进行测试的时候,发现有内存泄漏问题,以下为个人总结,有不足的地方或者更好的处理方式还请指点!

具体过程如下:

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,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

推荐阅读更多精彩内容

  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 1,706评论 0 11
  • 内存泄漏的相关定义OC当中内存管理方式:ARC/MRCARC:自动引用计数(系统自动管理内存),由开发人员开辟内存...
    骑老虎喊救命阅读 1,981评论 0 2
  • 先来一发苹果官网上Instruments User Guide,其实没啥用,英语不好的也懒得去看。(反正我是看不懂...
    和珏猫阅读 24,826评论 51 363
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 155,903评论 24 680
  • 我走进电梯整理表情调整呼吸 努力不让眼泪决堤 这不算打击不是末日不用伤心 不过是再一次失去而已 我还可以 前往更美...
    天地一孤啸阅读 378评论 0 3