施用Instruments检测内存泄漏,iphone模拟器检测内存

使用Instruments检测内存泄漏,iphone模拟器检测内存
2.7 秘诀:使用Instruments检测内存泄漏 在调优应用程序时,Instruments扮演着重要角色。它提供了一套工具,用于监控性能。通过它的泄漏检测,你可以跟踪、识别和解决程序中的内存泄漏问题。
秘诀2-1显示了一个存在两处泄漏问题的应用程序:一处是用malloc()构建了一个字符串,但是没有调用相应的free(),另一处是本章前面展示的NSArray例子。 要看到Instruments的实际应用,首先需要加载秘诀2-1的示例项目。在Xcode中选择Run(运行)→Run with Performance Tool(使用性能工具运行)→Leaks(泄漏)。这将启动Instruments和模拟器。应用程序开始在模拟器中运行,Instruments则观察它的进展。 单击应用程序中的任意一个按钮使内存泄漏。String按钮泄漏一个128B的已分配内存的块。Array按钮泄漏一个32B的NSArray。在Instruments中,内存泄漏以橘色三角形的形式出现。三角形的大小表明泄漏的大小。 为了查看各处泄漏的列表,必须单击Leaks行,如图2-11所示。默认情况下,ObjectAlloc行被选中。每处泄漏显示泄漏的内存量、泄漏开始的地址以及泄漏对象的类型。
(点击查看大图)图2-11 
Instruments跟踪由不能回收的内存导致的泄漏要跟踪关于何处发生泄漏的细节,打开Extended Detail窗格(View→Extended Detail, Command-E)。或者,单击Instruments窗口底部"Leaked Blocks"字样左边的detail按钮。然后单击泄漏列表中的任何一项,这将在Extended Detail视图中打开针对那处泄漏的栈跟踪,
如图2-12所示。
在此视图中,可以发现一个栈跟踪,它将泄漏追溯到它的创建处。如屏幕截图所示,当前的内存泄漏是在已经分配内存的leakCString中分配的。发现对象的起源有助于追踪在对象生命周期中的何处会发生泄漏。发现后,就有望堵住泄漏,解决程序中的内存问题。
(点击查看大图)图2-12 
Extended Detail视图中的栈跟踪揭示泄漏发生于何处
秘诀2-1 创建程序中的泄漏 获取这一秘诀的代码 要获取这一秘诀的代码,请访问http://github.com/erica/iphone-3.0-cookbook-,如果你已经下载了包含本书所有示例代码的磁盘映像,请打开第2章的文件夹查看关于这一秘诀的项目。