使用Xcode的Instruments检测解决iOS内存泄露(leak)_奋斗吧灬青年的博客-程序员秘密

技术标签: Instruments  iOS开发  IOS  内存泄漏  

在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode8自带的Instruments中的Leaks检测我们的程序有没有内存泄露和定位内存泄露的代码.(分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的)

第一步:打开Xcode8自带的Instruments


或者:

或者:长按运行按钮,然后出现如图所示列表,点击Profile.

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

选择之后界面如下图:

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

(有一个注意的点,最好选择真机进行测试,模拟器是运行在mac上的,mac跟手机还是有区别的嘛。)

1.选中Xcode先把程序(command + R)运行起来(如果Xcode左上角已经是instrument的图标就不用执行这一步了)

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

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

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

显示如下图界面

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

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

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

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

在选择call tree后,可能你会发现查看不到源码从而无法定位内存泄漏的位置,只是显示16进制的数据。此时需要你在Xcode中检查是否有dSYM File生成,如下图所示选择第二项DWARF with dSYM File.

参考:http://www.cnblogs.com/iOSv587country/p/4862989.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ljc_563812704/article/details/69557631

智能推荐

js 文件压缩与解压缩_东尔的博客-程序员秘密

今天遇到个压缩文件eval((function()后面填了一堆字符串用火狐开页面以后打开,f12调试将代码美化能得到不压缩的版本或者上网找解密解压缩的地方都可以解密加密网上搜 eval js加密eval((function(x)这种的不会网上的加密都是换成eval(function(p,a,c,k,e,r)...

亲身实践win7和ubuntu14.10双系统的安装以及win7系统重装后系统引导界面的修复_EyeToTheWorld的博客-程序员秘密

双系统的安装:1、本人是先安装的win7系统再安装的ubuntu14.10系统,在尝试了几台不同的笔记本电脑之后,我发现一些电脑似乎装不了ubuntu系统,例如ThinkPad p440.具体双系统的安装,大家可以直接网上百度,大致过程就是:分配出存储空间ubuntu系统U盘启动盘的制作U盘启动进行ubuntu系统的安装win7系统重装后系统引导界面的修复:由于随着系统应用

spring cloud gateway 实现限流_只吃两个荞麦馒头的博客-程序员秘密

对一些客流访问量比较大,存在高并发情况的系统,就需要在系统中进行限流,一方面是为了防止大量的请求致使服务器宕机,导致服务不可用,另一方面是为了防止网络攻击。一般的应用服务器,都是通过限制线程池的线程数来控制并发,也有通过单位时间内窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限流。常见的限流算法:引用一位博主所介绍的,个人觉得说的很容易理解...

修改python plot折线图的坐标轴刻度_plot坐标轴刻度_链巨人的博客-程序员秘密

修改python plot折线图的坐标轴刻度,这里修改为整数: 代码如下:from matplotlib import pyplot as pltimport matplotlib.ticker as tickerimport numpy as npdef std_plot(): overall_std = [34.369, 21.366, 16.516, 11.151...

虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载_weixin_39628339的博客-程序员秘密

windows7中文版家庭普通版是简化的家庭版,windows7中文版支持多显示器,有移动中心,限制部分Aero特效,没有Windows媒体中心,缺乏Tablet支持,没有远程桌面,只能加入不能创建家庭网络组(Home Group)。windows7中文版拥有无限应用程序、实时缩略图预览、增强视觉体验(仍无Aero)、高级网络支持(ad-hoc无线网络和互联网连接支持ICS)、移动中心(Mobi...

【CNN系列】理解CNN中的通道 channel_cnn里的channels_XYKenny的博客-程序员秘密

思路特清晰,转自https://blog.csdn.net/sscc_learning/article/details/79814146在深度学习的算法学习中,都会提到 channels 这个概念。在一般的深度学习框架的 conv2d 中,如 tensorflow 、mxnet ,channels 都是必填的一个参数。channels 该如何理解?先看一看不同框架中的解释文档。首先,是 te...

随便推点

Celery分布式异步任务处理框架_汝何秀的博客-程序员秘密

1. Celery 简介Celery是一个自带电池的基于Python开发的分布式异步任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农。它非常易于使用,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用Celery。它主要适用于两大类场景:异步:有的任务执行时间较长,你不想让程序一直等待结果返回,可以先将改任务放入celery任务队列中,并从Celery获取一个任务ID。后

Openrisc的or1200_Vincent8080的博客-程序员秘密

1 什么是OpenRISC OpenRISC 是硬件开源社区opencores开发的RISC指令集处理器架构,包括32 bits 的Openrisc1000 和64 bitsOpenrisc 2000. 目前只实现了32bits or1200处理器。所以,在实际中Openrisc实际指的就是or1200. 2 什么是ORPSOC 有了or1200处理器,就可以用其搭建SOC芯片了,Opencore...

C语言求一个二维数组鞍点_c加加用数组求鞍点_wzwys9的博客-程序员秘密

C语言求一个二维数组鞍点/*1.一个二维数组的鞍点(行中最大,列中最小)(不要百度)*/#include<stdio.h>#define N 3#define M 4int main(){int a[N][M];int i,j,i1,max,min,t=0,c=0;int b4;for(i=0;i<N;i++){for(j=0;j<M;j++){scanf("%d",&a[i][j]);}}for(i=0;i<N;i++){for

pandas 每一列画图_学习pandas下的dataframe画图参数 ——转载_weixin_39764603的博客-程序员秘密

学习pandas数据框的绘图,轻松搞定各种图画法。DataFrame.plot(x=None,y=None,kind='line',ax=None,subplots=False,sharex=None,sharey=False,layout=None,figsize=None,use_index=True,title=None,grid=None,legend=True,s...

mysql 对账语句_我在用python做一个小的对账单管理系统,需要把txt导入mysql数据库,用mysqldb库,..._等灯等灯丶的博客-程序员秘密

{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"detailCard","newCard":[{"ifIcon":"icon","icon":"censor","iconImg":"","contentLink":"https://ai.aliyun.com/vi/censor","title":"视频审核...

LeetCode 118 杨辉三角 HERODING的LeetCode之路_HERODING23的博客-程序员秘密

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pascals-triangle著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:思路很简单,分为第一行处理,和非第一行处理

推荐文章

热门文章

相关标签