• iOS Instruments内存检测使用


    Instruments 可以帮我们了解到应用程序使用内存的几个方面:

    • 全局内存使用情况(Overall Memory Use): 从全局的角度监测应用程序的内存使用情况,捕捉非预期的或大幅度的内存增长。
    • 内存泄露(Leaked memory): 未被你的程序引用,同时也不能被使用或释放的内存。
    • 废弃内存(Abandoned memory): 被你的程序引用,但是没什么卵用的内存。
    • 僵尸对象(Zombies): 僵尸对象指的是对应的内存已经被释放并且不再会使用到,但是你的程序却在某处依然有指向它的引用。在 iOS 中有一个 NSZombie 机制,这个是为了内存调试的目的而设计的一种机制。在这个机制下,当你 NSZombieEnabled 为 YES 时,当一个对应的引用计数减为 0 时,这个对象不会被释放,当这个对象再收到任何消息时,它会记录一条 warning,而不是直接崩溃,以方便我们进行程序调试。

    这里我们介绍下查找内存泄露的过程:

    1、同「CPU 占用性能测试」一样,先在 Xcode 中对当前的项目执行 Profile (Command-I),并在打开的对话框中选择 Leaks 这个模板:

     

    2、进入 Instruments 后,选择正确的设备和应用程序。

    3、点击红色按钮运行应用程序,我们可以看到如下界面:

     

    4、在 Display Settings 中勾选 Invert Call TreeHide System Libraries 或其他选项可以过滤显示的数据。

     

    5、在导航栏的筛选框中,我们可以输入关键字来筛选数据。

     

    image

    6、在实际使用中,我们进入一个页面后再退出,发现相关的内存分配没有清空,这时候就发生内存泄露了。我们查看更细节的调用信息,追踪到可能造成内存泄露的代码位置:

    image

    7、我们还可以使用 Activity MonitorAllocationsZombies 等模板来针对性地做内存监测。

    在开发中我一般是使用Xcode自带的instrument工具就够用了,它的快捷键是(commend+i),是自带的一个可以用来分析应用程序的性能,
         有三个功能在开发中经常用到,
    1、Leaks就可以检测内存泄漏,利用它可以看到全局的一个内存使用情况,也可以查看是否存在内存泄漏,是否存在野指针;
    2、是可以使用 Core Animation + Time Profiler 来评估图形性能,可以很直观的看到界面的性能是否良好。
    3、Time Profiler在应用程序开始运行后.我们可以看到不同的线程以及方法调用占用的时间,从而可以评估出 CPU 性能的瓶颈和找到优化方向。
    但在使用Xcode这个工具的时候有2个注意点:
     1.需要使用真机。因为手机的CPU,GPU和模拟器是有区别的,mac的Cpu是比手机快的,而模拟器要用CPU来模拟手机的GPU,这点模拟器是比不上手机的。
    2.应用程序运行一定要发布配置 而不是调试配置.,因为打包的时候,编译器会自动进行优化,比如去除调试符号或者移除并重新组织代码,还会引入"Watch Dog"[看门狗]机制,不同的场景下,“看门狗”会监测应用的性能,但在xcode的配置设置下,watch Dog会被禁用。
  • 相关阅读:
    STL目录
    Hola!
    SWPUCTF 2019总结以及部分WP
    SQL手工注入基础篇
    JDK11,JDK12没有JRE的解决方法
    FJUT2019暑假周赛三部分题解
    FJUT2019暑假周赛一题解
    随笔1
    关于针对本校教务系统漏洞的一次信息检索
    KMP算法讲解
  • 原文地址:https://www.cnblogs.com/somethingWithiOS/p/6032614.html
Copyright © 2020-2023  润新知