zoukankan      html  css  js  c++  java
  • 检测内存泄露:Instruments中的Leaks

    前言

    如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测.

    现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如:使用通知,别忘了移除; 使用presentViewController弹出新的控制器,别忘了dismiss等等.

    如果出现了内存泄露,一般是导入了c的第三方框架. 或者在项目中使用c的类创建了对象,没有手动释放该对象;例如Quartz2D绘图

              

    //1.获取图形上下文
          CGContextRef ctx=UIGraphicsGetCurrentContext();     
    //2.绘图
    //2.1创建一条直线绘图的路径
    //注意:但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放
          CGMutablePathRef path=CGPathCreateMutable();
    //2.2把绘图信息添加到路径里
          CGPathMoveToPoint(path, NULL, 20, 20);
          CGPathAddLineToPoint(path, NULL, 200, 300);
    //2.3把路径添加到上下文中
    //把绘制直线的绘图信息保存到图形上下文中
          CGContextAddPath(ctx, path);
    //3.渲染
          CGContextStrokePath(ctx);
    //4.释放前面创建的路径.如果没有写这句就会造成内存泄露
          CGPathRelease(path);
    


    Leaks的使用方法:

    第一步:打开Xcode7自带的Instruments

    或者:

    按上面操作,build成功后跳出Instruments工具,选择Leaks选项

    选择之后界面如下图:

    到这里之后,我们前期的准备工作做完啦,下面开始正式的测试!

    1.选中Xcode先把程序(command + R)运行起来

    2.再选中Xcode,按快捷键(command + control + i)运行起来,此时Leaks已经跑起来了

    3.由于Leaks是动态监测,所以我们需要手动操作APP,一边操作,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测(也可继续检测,当多个时暂停,一次处理了多个).如图所示:

    4.下面就是定位修改了,此时选中有红色柱子的Leaks,下面有个"田"字方格,点开,选中Call Tree

    显示如下图界面

    5.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries,(红圈范围内)显示如下:

    到这里就算基本完成啦,这里显示的就是内存泄露代码部分,那么现在还差一步:定位!

    6.选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处,如图所示

    7.找到了内存泄露的地方,那么我们就可以修改即可

  • 相关阅读:
    Sublime Text3快捷键大全
    IntelliJ IDEA常用快捷键(Mac)
    shell脚本执行错误 $' ':command not found
    Shell脚本中"command not found"报错处理
    Shell 数值、字符串比较
    Java线程池的构造以及使用
    Host 'xxx' is not allowed to connect to this MySQL server
    Linux下Mysql安装(tar安装)
    Linux下Mysql安装(RPM安装)
    Mac安装Mysql
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5344142.html
Copyright © 2011-2022 走看看