Instruments 介绍:

1.动态调试追踪和分析OSX和iOS的代码的性能和测试工具

2.支持多线程的调试

3.录制和回收,图形用户界面的操作过程

4.可将录制的图形界面操作和Istruments保存为模版,供以后访问使用

5.追踪代码中的问题

6.分析程序的性能

7.实现程序的自动化测试

8.部分实现程序的压力测试

9.执行系统级别的通用问题追踪调试

10.使你对程序的内部运行过程更加了解

Instrument模版介绍:

1.leaks(泄漏):(找到引发内存泄漏的起点。) 一般的查看内存的使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录

2.Time Profiler(时间探测):(分析代码的执行时间,找出导致程序变慢的原因。)执行对系统的CPU上运行的进程低负载时间为基础采样

3.Allocations(内存分配):(监测内存使用/分配情况)跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留释放历史

内存问题:

1.内存泄漏    使用leaks

2.野指针        指针指向的对象已经销毁      使用僵尸对像

3.Abandoned Memory(被遗弃的内存):由于某些原因被分配,但并非一直需要,只是在程序运行期的某个时候需要,如:内存缓存的图片,单例(为某个模块创建一个单例对象来维护这个模块所需要的数据,但在退出模块后,这个单例对象依然存在)

Abandoned Memory可以采用所谓的Generational Analysis方法来分析,即反复进入退出某一个场景,查看内存的分配与释放情况,以定位哪些对象是属于Abandoned Memory的范畴

附加知识点:

1.栈:编译器自动分配释放,存放函数体中定义的变量

2.堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收

3.全局区(静态区):全局变量和静态变量(static修饰的变量)的存储释放在一块的

初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量放在相邻的另一块区域,程序结束释放

4.常量区:存放函数中的字符串,程序结束时释放

5.程序代码区:存放函数体的二进制代码。