热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

instr_iOSInstruments

篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOSInstruments相关的知识,希望对你有一定的参考价值。使用Instrumen

篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS Instruments相关的知识,希望对你有一定的参考价值。


使用Instruments 经常用来做如下的功能:



  • 监测分析 与app内存相关的东西。(app 随着使用时间增长变的原来越卡

  • 某些方法非常消耗时间性能 造成卡顿等

 

一、监测分析 与app内存相关的东西


技术分享
 

 


1、 Allocations
点击XCode的Product菜单Profile启动Instruments,选择allocation,会自动启动allocation工具和模拟器。启动后,Allocations面板显示内存中的对象占用曲线,可以显示目前内存中分配了哪些对象,对象的数量,以及由哪些函数进行创建的。

Allocations可以监测到app中一般和虚拟内存的使用情况。统计到的内存类别有All Heap & Anonymous VM、All Heap Allocations、All Anonymous VM。我们无法控制Anonymous VM部分,所以一般只关注All Heap Allocations。

可以对每个动作的前后进行Generations,对比内存的增加,查看使内存增加的具体的方法和代码所在位置。具体操作是在右侧Generation Analysis里点击Mark Generation,这样会产生一个Generation,切换到其他页面或一段时间产生了另外一个事件时再点Mark Generation来产生一个新的Generation,这样反复,生成多个Generation,查看这几个Generation会看到Growth的大小,如果太大可以点进去查看相应占用较大的线程里右侧Heaviest Stack Trace里查看对应的代码块,然后进行相应的处理。



技术分享
 

Detail Pane中统计信息包含的类型:Statistics、Call Trees、Allocations List、Generations。

(1)、Statistics统计项:



技术分享
 


(2)、Call Trees统计项:



技术分享
 

(3)、Allocations List统计项:



技术分享
 

(4)、Generations统计项:



技术分享
 

2、Zombies

使用Zombies工具来查找僵尸对象: Zombies工具的查找原理其实和设置NSZombieEnabled环境变量的调试方法是一样的,启动Zombies后在内部设置了NSZombieEnabled为true。

启用了NSZombieEnabled的话,它会用一个僵尸对象来代替已释放对象。也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

 

3、Leaks
启动Leaks工具后,它会在程序运行时记录内存分配信息和检查是否发生内存泄露。
定位内存泄漏问题:点击Leak Checks时间条的红色叉,查看某行内存泄漏调用栈,会直接跳到内存泄漏代码位置。



技术分享
 

 

Details Pane包含的统计信息有:Leaks、Cycles &Roots、Call Tree。


(1)、Leaks统计项:



技术分享
 


 

 (2)、Cycles&Roots统计项:


技术分享
 

 

 

 

 

 

 















推荐阅读
author-avatar
镜头拿反的葛小峥给_523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有