美文网首页iOS开发
Instrument之Allocations

Instrument之Allocations

作者: 董二千 | 来源:发表于2016-01-04 21:15 被阅读306次

从搜集的数据中分析内存中存在的问题

  • 搜集数据
    这里因为篇幅问题暂时只介绍一种打开Allocatons的方法,首先在真机上运行app。
    DebugNavigation上面选在Memory,可以看到大概的内存情况,再点击Profile in Instruments进入Allocations页面。
示意图.png

先看Detail pane这里是收集到得数据,下面我们要从这里分析出哪里出问题了。
先介绍几个概念。
Persistent:该对象存在于内存中的个数
Transient:存在过已经被回收的对象的个数
Persistent Byte:该类对象在内存中占得总内存
Growth:增加的内存
接下来看看这些数据,选择Statistics统计,这些数据的排列是按照所占内存的大小,从高到低排列下来的。

搜集的数据.png

第一种方法

现在介绍的这个找出问题的方法,建立在你大概可以感觉到哪个地方出错了。不然你就得,看这里大量的数据,从中找出感觉不对劲的。下面的一种方法会介绍从宏观的角度去找问题。
看这个类,目前在内存中只有1个(它是一个cell,该类型的cell,在数据源里面只有一个),然后我会不停的在这个页面和其他页面之间切换。

切换之前的MSCollectionAndCardCell.png

切换之后

切换之后的 PM.png

//这里变成了10,正确的应该只有一个的??

选中灰色箭头

4145388B-2CBD-4459-93A5-989AB9AD246F.png

到这里

F3D5CA5E-C62A-434F-8BE8-B51510A61CA8.png

选中其中之一,在详情扩展区域(Extended Deatil Area)选择,Extended,

D8940023-0D70-4838-9F4F-AE5DC410814E.png

到这里,

27C7CD02-131E-42B4-8CF2-DCC269C50C47.png
可见这里的cell没有重用,每次都会创建一个
然后把它换成这样,就ok了 DB2F88CD-36D7-411D-8638-C7EE69E6D699.png

第二种方法

第一步,观察内存的graph,看看有没有哪里是异常的。
下面是我三进三出,一个页面所出现的内存曲线

7241EE67-5D31-4BB5-8C8B-782AE64E5036.png
可以看到内存在递增.。然后我将会打点,对就是打点,在进页面和出页面的时候分别打点,也就是6个点。来观察不同时间内,是哪些数据的内存异常增加(Unbounded memory growth)
在详情面板,选择Generation(1),然后再Extended Detail Area(2)区域选择DisPlay Settings,每次要打点时按MarkGeneration(3),在图形区域就会出现一个红色的小旗子(4),6个点分别命名A、B、C、D、E、F(5) E7466E18-0DFB-41E0-9FB3-602AC7390EF7.png

然后分析数据
看Growth,从0-12.16M17.96k-2.24M8.09k-2.48M,可见每次进入目标页面,内存就会增加几兆,第一次更多,为什么,是什么占用了这么多内存。
点看B,请看这里内存占用最多的是和图形和动画相关的,SVProgressHUD,CoreUI Image,CoreAnimation

A.png

第一次增加的特别多什么呢,再看D

D.png
在A里面排列前几的都没了,推测可能是因为有缓存
占有最多的是,每次进入页面的刷新组件的头部,头部是有动画效果的,所以比较耗内存。
如何运用第二种方法
先在各个页面划一划,看看总体的内存情况,如果发现有异常的内存曲线,就多次打点,取数据分析。
Tips:多次进入同一个页面内存会缓慢上升,不要急,这是缓存,只要按home键退到后台就降下来了

相关文章

网友评论

    本文标题:Instrument之Allocations

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