• IOS性能调优系列:使用Allocation动态分析内存使用情况


    硬广:《IOS性能调优系列》第三篇,持续更新,欢迎关注。

    IOS性能调优系列:Analyze静态分析》介绍了使用静态分析方法查找IOS内存泄漏的方法,《IOS性能调优系列:使用Instruments动态分析内存泄漏》讲解了使用Instruments的Leaks工具动态分析内存泄漏。

    这两篇都是关注于内存泄漏的,是内存调优首先要关注的方面。

    关于内存的问题,除了内存泄漏以外,还可能存在内存不合理使用的情况,也会导致IOS内存警告。

    内存的不合理使用往往比内存泄漏更难发现,内存泄漏可以更多借助于工具的判断,而内存的不合理运用更多需要开发者结合代码、架构来进行分析。

    明确说明一下两者的区别:

    内存泄漏:是指内存被分配了,但程序中已经没有指向该内存的指针,导致该内存无法被释放,产生内存泄漏。

    内存不合理运用:苹果官方称这种情况为Abandoned Memory,也就是存在已分配内存的引用,但实际上程序中不会使用,比如图片等对象加入了缓存,但缓存中的对象一直没有被使用。

    XCode提供的Instruments中的Allocation工具可以用来帮你了解内存的分配情况,当你的App收到内存警告时,首先应该用Allocation进行内存分析,了解哪些对象占用了太多内存。

    Instruments Allocation使用详解


    和使用 Instruments的其他工具一样,点击XCode的Product菜单Profile启动Instruments:

    选择Allocation,会自动启动Allocation工具和IOS模拟器:

    启动后Allocation面板显示了内存中的对象占用曲线,可以显示目前中内存分配了哪些对象,对象的数量,以及由哪些函数进行的创建。

    左侧有几个比较有用的选项:

    All Objects Created

    Created & Still Living

    Created & Destroyed

    Allocation 分析技巧


    通过以上方法可以对应用的整体内存使用情况有所了解,但内存不合理使用导致的内存警告往往是部分代码或视图导致的,我们往往要关注于某段时间或操作过程中内存的分配和使用情况,Allocation提供了这种功能。

    比如在进入一个视图前或操作前,我们在Allocation面板左侧点击Mark Generation,这时候会产生Generation A节点,显示内存当前的情况:

    我们可以在进入视图后再点一次Mark Generation,在视图退出后再点一次Mark,这样三次产生的 Generation分别记录了进入前、进入后、关闭后,再最后一个Generation应该内存被合理释放,否则就代表了在这个视图或操作中有泄漏或不合理的地方。

    以上只是Allocation的基本运用,设计出一套使用Allocation来合理测试的方案是比较复杂的,后续慢慢介绍。


    记录,为更好的自己!

  • 相关阅读:
    ValueError: max() arg is an empty sequence
    链接到镜像
    SparkStreaming+Kafka
    软件质量六大属性—
    架构之美3
    架构之美2
    架构之美-读书笔记之一
    机器学习四正则化(Regularization)
    机器学习三--各种差
    机器学习系列(二)——回归模型
  • 原文地址:https://www.cnblogs.com/ym123/p/4316328.html
Copyright © 2020-2023  润新知