文档章节

iOS Instrument Leaks

Lambda8421
 Lambda8421
发布于 2015/03/05 18:06
字数 1405
阅读 77
收藏 0

 Leaks

       Leaks 工具是一个跟踪所有由应用程序分配的内存工具,可以用来识别在应用程序里面的内存分配模式,并识别应用程序内存效率低下的地方。这是为了应用程序能够消除 内存泄露,进一步提高程序的可靠性,对于设计为长时间运行的程序尤为正确。(最新版本autorelease不会被判定为内存泄露)

       Leaks Trace Template 用来测试内存使用、检查内存泄露、提供类的对象内存分配和泄露的内存的统计。它由Allocations和Leaks组成。

用Leaks工具可以发现App不再有引用指向的内存。Leaks工具提供这些内存块的报告。大部分这些内存泄露都是用类的名字来标识的,另外可能会用分配内存的大小标识。

定位泄露的内存

  1. 打开Leaks Template。
  2. 从工具栏菜单中选择你要进行检测的app。
  3. 点击Record按钮。
  4. 执行你要检查的代码的操作,当有内存泄露的时候点击Stop按钮。
  5. 在Detail窗口中点击被标记为泄露的内存。
  6. 在Extended Detail 窗口,在代码中双击选中其中的一条指令。
  7. 在Detai窗口中点击Xcode图标,可以在Xcode中打开你要查看的代码。


    注意:如果泄露的不是一个对象,那么可能是你的API调用的时候分配了一块内存但是忘记了去释放。

    如果泄露的内存是一个Object-C对象,点击选中的对象旁边的箭头,每个单独的地址将会显示每个对象retain/release的历史记录,对每一个事件都有堆栈跟踪。

    引起非对象内存泄露的原因是内存的分配和释放没有保持一致,因此只能显示每个事件的堆栈跟踪。

    跟踪视图的内存泄露集合了所有的内存泄露块的位置——代码中的一个错误可能导致重复执行的这段的代码的调用产生多个运行时的内存泄露。

    打 开Xcode查看每个每一个产生内存泄露的代码时,内存泄露还没有被清除。Leaks工具的Detail窗口中的Cycles&Roots允许你 去查看调用循环。用ARC的时候Cycles&Roots视图是非常重要的。它可以用更高级的视图方式显示循环引用。通常的解决这些问题的关键是 就是把引用改为弱引用。

    查看循环引用内存泄露

    1. 选择Leaks
    2. 在Detail面板中选择Cycles&Roots视图。
    3. 选择内存泄露的循环引用表。


    注意:如果另一部分代码依然依赖这个消除的Bug或者这个Bug没有修改正确,那么你的App依然不稳定。

有两种方式可以运行Allocations And Leaks(同Time Profiler打开方式相似)。

一、在Xcode中的Debug中打开(第一种方式)

1)运行程序后,进入Show the Debugger navigation(红色线框区域)界面。

          选中Memory(蓝色线框区域)

        @1.Memory Use:            彩虹圈的8G是本机的内存,其中18.7M为IOS Simulator所占用的内存(这里的占用数据只能作为参考,实际真机占用内存可能会比这个数据要小)。

        @2.Usage Comparison : 这里是本机内存的使用情况,其实TestForApp为IOS Simulator所占内存。

         @3.Memory:

                                                   Duration:为IOS Simulator 运行app的实际时间;

                                                   High:    使用内存最多时的内存数量;

                                                   Low:      使用内存最低时的内存数量;

 

2) 点击右上角Profile in Instruments,进入Instruments界面。

 

         这里会弹出一个对话框。

        @1Restart: (重新运行项目)

        @2Transfer:(将当前运行项目直接放入Instruments进行分析)

3) 点击Restart,进入分析界面。点击运行按钮,运行 一段时间后,有如下界面。

 

           @1.Allocations:    分配的内存(被选中,区域3显示即为Allocations)

           @2.Leaks:         有内存泄露的内存

           @3.Details:        具体的分配和泄露内存的分析(选择Call Tree选项可以查看)

           @4.Settings:      详细的设置(选择Allocations 和 Leaks设置选项不同) ,以下为Allocations的Settings

                                        Allocations Lifespan:    Allocations                          (所有分配的内存)

                                                                               Created & Persistent           (仍存在的) 

                                                                               Created & Destroyed           (销毁的)

                                        Allocations Type:         All Heap & Anonymous  VM(堆内存和虚拟机上分配的内存)

                                                                               All Heap Allocations            (堆内存)

                                                                               All VM Regions                     (虚拟机上分配的内存)

4)右键点击Leaks区域,选择Call Tree 查看(Leaks 中红色部分即为内存泄露)

      

         双击main函数

 

              @1:红色区域有内存泄露55.33KB

              @2:  绿色区域直接将arrString = nil; 项目没有使用ARC,arrString alloc后没有release,造成内存泄露。

5)修改项目后重新编译,再次进入分析界面

 

            @1:  红色区域修改代码,重新编译;

            @2:  成功运行App后不再有内存泄露。

6)查看Allocations

 

         @1:选中Allocations

         @2:选中2中的Call Tree,查看分配的内存详情。

         查看Allocations方式与查看Leaks的方式基本相同

7)退出保存

           @1:点击退出键,如果有运行过的项目,则会弹出保存对话框;没有运行过项目则直接退出

           @2 :  保存选项

 

二、从Instruments中打开Allocations and Leaks

1)打开Xcode开发工具

           @1: 打开Xcode->Open Develop Tool ->Instruments

2)显示如下界面

          @1:下拉可以选择所有的Instruments。

3)下拉选择Leaks

           @1: 双击Leaks,显示如下界面

 

4)其余步骤跳参考: 一、3)

© 著作权归作者所有

共有 人打赏支持
Lambda8421
粉丝 10
博文 121
码字总数 121640
作品 0
闸北
程序员
私信 提问
类jQuery selector的UI自动化测试用控件查询iQuery开源类库介绍

整个iQuery的代码是开源的,今后也将有后续文章讲解iQuery的实现方式,对iQuery有兴趣的朋友可以在此下载或者同步代码: https://github.com/vowei/iQuery 在程序界面(UI)自动化测试中,最...

红薯
2012/08/14
665
0
开源手机自动化测试框架iQuery入门教程(一)

上次介绍iQuery之后,已经有些朋友在开始在手机自动化测试程序里试用iQuery了,由于之前的介绍文档比较含糊,先搁置扩展iQuery使其支持多种编程语言的系列文章,补充一下iQuery的入门教程,之...

知平软件
2012/09/12
0
0
iOS各种调试技巧豪华套餐(下)

进击的码农 如果说你已经把打印的艺术运用的风生水起了,并且断点的使用可以信手拈来随心所欲,那么你已经在与逼优鸡的对峙中,稳操大部分胜券了,你已经是一个孤高冷艳的程序员了,俯视一切...

BruceYu的博客
2015/05/16
0
0
instrument 之Core-Animation 性能调优(Color Blended Layers)

在性能优化中一个最具参考价值的属性是FPS:全称Frames Per Second,其实就是屏幕刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也...

夜空下最亮的亮点
2017/12/15
0
0
android下是否有像ios的instrument这样的工具?可以方便的查看内存泄露等?

android下是否有像ios的instrument这样的工具?可以方便的查看内存泄露等?andrid下一般如何做这种事情?

芒果阿狸
2012/11/23
329
1

没有更多内容

加载失败,请刷新页面

加载更多

撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
9分钟前
0
0
《配电网自动化技术》第一章

写了配电网的组成、历程、难点、存在问题、解决方案,还是蛮好的。尤其是各地建设的系统后续又无法实用化,以及多种终端反而增加了运维工作量等,都是目前切实存在的让大家不停吐槽的内容。

max佩恩
14分钟前
0
0

中国龙-扬科
32分钟前
2
0
使用vuex的state状态对象的5种方式

vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试。 下面给大家来贴一下我的vuex的结构 下面是store文件夹下的state.js和index.js内容 //state.jsconst state =...

peakedness丶
36分钟前
2
0
NetCore MVC Demo

地址:http://114.116.9.72:5411

whltian
43分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部