美文网首页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