文档章节

iOS Instrument Leaks

Lambda8421
 Lambda8421
发布于 2015/03/05 18:06
字数 1405
阅读 73
收藏 0
点赞 0
评论 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
博文 120
码字总数 121640
作品 0
闸北
程序员
IOS12开发者预览版第二版使用评测

     手头有一部iPhone 6s Plus,因为之前看同学和朋友们升到IOS 11后手机变得非常卡顿所以没有升级。最近偶然看到IOS 12针对旧机型做了性能优化,号称提升70%相机打开速度、50%键盘显示...

张旭乾 ⋅ 昨天 ⋅ 0

【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

HDU ~ 6297 ~ CCPC直播 (模拟,输出格式控制)

思路:模拟就行了,注意Running和RTE的开头字母一样。 iomanip是I/O流控制头文件,就像printf的格式化输出一样。 以下是一些常用的: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oc...

zscdst ⋅ 05/29 ⋅ 0

苹果对体无完肤的 iOS 11 最后的弥补

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 距离万众瞩目的苹果开发者大会(WWDC 2018)的召开还有不到一周时间,苹果公司于今天凌晨,正式发布了 iOS 11 的第十四次更...

csdnnews ⋅ 05/30 ⋅ 0

天生不凡ios怎么在电脑上玩 天生不凡ios电脑版玩法教程

天生不凡ios怎么在电脑上玩呢?现在有很多小伙伴都在玩天生不凡手游,不过相对于传统的在手机上进行游戏,很多人都倾向于新玩法,就是在电脑上玩天生不凡手游。下面小编就给亲们介绍下天生不...

kaopu8520 ⋅ 05/29 ⋅ 0

Dhar/YTTInjectedContentKit

YTTInjectedContentKit iOS壳版本场景下的批量修改类名、属性名、插入混淆代码、修改项目名称的shell脚本 具体的实现和使用方法请参考我的博客文章: iOS使用shell脚本注入混淆内容 iOS使用S...

Dhar ⋅ 05/04 ⋅ 0

iOS笔记-记录一次内存泄漏发现过程

前言 本文主要记录在iOS开发中发现的一个系统级别内存泄露的过程。测试iOS系统11.2.1,设备iPhoneX。 如何复现 下面是复现泄漏的测试代码,是一个没有任何多余代码的类,继承自。 当对一个没...

handyTOOL ⋅ 04/17 ⋅ 0

苹果 WWDC 2018 重点推出 iOS 12

苹果正式宣布第 29 届年度全球开发者大会(WWDC 2018)将于美国当地时间 6 月 4 日星期一(北京时间 6 月 5 日凌晨一点)拉开帷幕,大会将持续到 6 月 8 日星期五。和 2017 年一样,此次会议...

问题终结者 ⋅ 04/15 ⋅ 0

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN 2018-05-15 10:26编辑: 枣泥布丁分类:业界动态来源:https://www.upyun.com/products CDN又拍云 招聘信息: C++工程师 Cocos2d-x游戏客户...

枣泥布丁 ⋅ 05/15 ⋅ 0

面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课 ⋅ 04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS7克隆后网卡配置问题

首先默认第一台虚拟机网卡信息为: TYPE="Ethernet" BOOTPROTO=static DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" #IPV6INIT="yes" #IPV6_AUTOCONF=“yes” #I......

北岩 ⋅ 58分钟前 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 今天 ⋅ 0

expect

官网:https://core.tcl.tk/expect/index Introduction Expect is a tool for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect really m......

刀锋 ⋅ 今天 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 今天 ⋅ 1

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部