美文网首页iOS 内存优化调试iOS基础性能调优
(转载)使用Xcode7的Instruments检测解决iOS内

(转载)使用Xcode7的Instruments检测解决iOS内

作者: iOS成长指北 | 来源:发表于2015-12-25 14:22 被阅读36525次

    来自 iOS丶Country的文章 地址http://www.cnblogs.com/iOSv587country/p/4862989.html

    作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode7自带的Instruments中的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.找到了内存泄露的地方,那么我们就可以修改即可

    有时候我们定位的时候会发现定位的部分是地址,简书 Xcode之Instruments使用给我们一个答案,在Build Settings -> Build Options 将Debug Information Format 的Debug值由DWAFR改成DWAFR with dSYM。

    相关文章

      网友评论

      • 8659b2865680:楼主,为什么用真机来进行内存泄露测试时,直接闪退啊,模拟器可以跑
      • 陈藩:我的工具一运行就崩溃了,请问有知道为什么的么?
        8659b2865680:同问,真机一运行就闪退,模拟器还可以跑一跑,不知道阁下解决这个问题了没有
      • IMKel:怎么我双击啥反应都没有,也不会进代码里去
      • 码农冰冰:我的右下角只有两个选框,没有所谓的田字方格
      • 孤单的道行天尊:我在实践的过程中并没有找到 leaks 中有您缩写的第5条的那个设置,也找不到图标的按钮.无法选中Invert Call Tree 和Hide System Libraries,请问我应该如何找到它.
      • 孤单的道行天尊:我在实践的过程中并没有找到 leaks 中有您缩写的第5条的那个设置图标的按钮.请问我应该如何找到它.
      • 东方奇迹:定位到AFN中.......(这种情况是不是就不用管它了,我查有的人说吧manager弄成单例类...)
      • 国强在线:有些童鞋跟我一样升级到了xcode 8.3.3版本了,而8.3.3版本的call tree不在右边,而在底部。不知此答案,是否能帮助部分童鞋。
      • 张芳涛:要不你录制一个视频吧,我现在用的Xcode8,你书东阿那些压根找不到。。别说定位代码了。。。。。。
      • 峰回路转_best:大神为什么选中Invert Call Tree 和Hide System Libraries,并没有显示的就是内存泄露代码部分, 而且上面leak栏中的确显示有红色的x号 这是怎么回事
        6a825ffb0ed3:@峰回路转_best 你的问题解决了吗我也出现了
      • 陌上北辰:为什么我leak checks 是红色的呢
      • 我头发贼多:直接定位到 afn 内部了
      • 小小看护:请问下定位内存泄露,都定位到内存地址上面,请问下有什么工具或者方法可以检测吗,先谢谢啦。一看都是红X,但就是定位到里面都是内存地址
        陌上北辰:我设置了 也是定位到内存地址,定位不到代码。。。。。你找到方法了么
      • 我的大名叫小爱:定位到 GPUimage 内部
      • 菜鸟吃咸鱼:为什么定位到af。。。。
        菜鸟吃咸鱼:@小小魚兒 没有。。。
        EnjoyJS:我的也是定位到 AFN 每个请求都内存泄漏, 你最后解决了吗?
        满庭花醉三千客:@摸裆一手翔 我的也是
      • a4d1419c8594:为什么定位不是源码?
      • KennyHito:楼主,我的定位出来的代码是汇编,请问这是怎么回事
        我的大名叫小爱:@海涛丶Larry 使用 call tree
      • loghm:请问我选中Invert Call Tree 和Hide System Libraries之后,表格就没有东西了,是说没有内存泄漏,但是我之前明明有出现红叉?
        Vincent20481:@tangw 我的为啥选不中
      • fc18f69e6ff0:我为什么定位不到xcode里面的代码
        fc18f69e6ff0:@笨笨的糯糯 :joy: 我也发现了,有的东西定位到某个线程里面,苦逼的是技术有限看不懂 ,暂时没发现我代码中有东西
        iOS成长指北:@闭上眼睛 关于定位的问题,我想说这个方法不会万能的,这个只能查出并解决你自己代码导致的,有些方法级别的就有问题了
      • 那已逝的时光:Call Tree这个里面的选项并不能选择是怎么回事?
        木頭炫:灰色的不能选中
        YSH_110:好巧,我也是
        一夜暴富两夜也行:我的也是,怎么处理呢
      • 不知蜕变的挣扎:程序正常运行 但是查出很多内存泄露 需要解决吗? 放个图片都泄露0.0怎么破
        CoderFarmer:我也想知道 程序刚启动就一个红X,是广告位网络请求的地方 定位到AFN里,这怎么玩啊,,,,, :sob:
        不知蜕变的挣扎:@笨笨的糯糯 main那个方法都提示内存泄露,我都晕了, 就简单的给image赋个图片,也内存泄露,af框架也存在泄露,这都没法解决啊
        iOS成长指北:@不知蜕变的挣扎 处理内存泄漏是提升iOS技能的一个重要部分。根据各种工具去解决他!
      • e0f6992dbc10:很易懂 能把instrument里面其他的模板也讲讲么
      • junfly:第三条第四条图片是一样的..... 第六条 点击左侧框内的 也没有跳到代码处, 而是显示no source
      • 碳酸钾:请尝试过在进行信息分享
        iOS成长指北:@碳酸钾 肯定是尝试过在进行信息分享的?有些时候内存泄漏可能是由于循环引用导致的,这时候你就没办法简单的看到代码了。
      • Ryan文濤:但是现在经常是一打开,一来就是58个内存泄漏。但是又看不到出现代码泄漏的地方,往往点进去就是些空的东西。什么都没有,这些原因是不是别的闭源框架出现的内存泄漏,所以才看不到?
        1fc7d81ef127:@Ryan文濤 我也看不到源码
        1fc7d81ef127:@Ryan文濤 请问解决了吗?
        爱易寒曲易散:@Ryan文濤 同问??
      • c96787cb33a7:说错了,是allocations
      • c96787cb33a7:请问能说一下allocater 分配器是怎么用的吗
      • e6cc6e95d12e:大神为什么选中Invert Call Tree 和Hide System Libraries,并没有显示的就是内存泄露代码部分

      本文标题:(转载)使用Xcode7的Instruments检测解决iOS内

      本文链接:https://www.haomeiwen.com/subject/qhebcttx.html