用instruments解决内存泄露问题.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用instruments解决内存泄露问题

用Instruments 解决内存泄露问题 从Leopard 开始,苹果在XCode 系列开发工具中增加了一个新的功能强大的性能调试工具,叫做 Instruments。Instruments 是一个非常具有新意的调试工具,如果你使用过iLife 中非常简单易用的音乐创 作工具GarageBand,你会发现这两者的界面非常类似。能够把开发工具的UI 做成像音乐创作软件的形式, 可能也只有苹果能够想到了。 Instrument 里提供了极多的功能,可以针对程序的各个方面进行优化调试。对于初学者来说,虽然这个软 件的界面极为友好,完全不同于以往的任何开发调试工具,但是如果能够有一篇简单的教学,手把手地通 过一个例子用Instruments 进行调试,那么就更容易上手了。 本篇文章通过一个简单例子,带你学习如何使用Instruments 工具解决应用程序中的内存泄露问题,特别 适合初学者阅读。在阅读之前,如果你对Objective-C 的内存管理还不是十分了解,推荐先阅读本站之前 的两篇文章: Objective-C 2.0 之前需要了解的:关于Obj-C内存管理的规则 和 关于Objective-C 2.0 的垃圾收集 这样可以更好地理解内存泄露是如何发生的,以及更好地通过本文了解如何快速地解决这一问题。 本文是Matt Long 最新的一篇文章,原文为英文,本站已经将其翻译成中文。 原文地址: /2008/04/02/cocoa-tutorial-fixing-memory-leaks-with-instruments 当我写完程序代码,希望尽快放出新版本的时候,烦人的修改内存泄露、优化代码和去除bug 是我最近主 要在做的事情。程序开发中的创建新功能和解决新问题的有趣部分已经过去了。现在要做的事情需要花费 很多时间,而且非常辛苦。 我知道针对这些方面的优化花费些时间是很值得的事情,因为程序会更稳定更出彩,但是进行这些优化和 解决这些问题真的是一个非常辛苦的工作。不过很幸运地,随着Leopard 的发布,苹果提供了一些新的工 具。对于这样的调试工作,我们可以使用一个叫做Instruments 的工具使其变得简单一点。 和往常一样,我写了一个demo程序可以让你看到这些调试是如何工作的。你可以在这里下载。这个教学中, 我仅仅告诉你如何使用Instruments检测内存泄露。这个工具的使用并不难,但是可能有一些细节你可能还 不熟悉。看完这个教学,你就会习惯使用这个强大的工具了。 在XCode 中运行Instruments 你可以直接运行Instruments,然后打开你的项目,但是更简单的方法是直接在XCode 中调用Instruments。 具体操作方法是在XCode 里打开demo 项目,或者是你自己的项目(需要先编译一下),然后在菜单中选 择 Run - Start With Performance Tool - Leaks 。 在研究这个项目时,我和Marcus (cimgf 的另一位作者)列出了一些你在使用Instruments 时需要记住的 事情。 - 断点不会中断 Instruments 在你的debug 项目中使用debug 信息,但是并不会在你设置的断点中自动中断。这是因为当 你通过菜单将程序在Instruments 中读取时,Instruments 使用当前的执行文件路径作为启动路径,从XCode 外部调用。如果你希望使用断点,你可以关掉Instruments 再执行程序。 - NSLog 的内容不会在Debugger 窗口中显示 如果你希望看到NSLog 中的内容,你需要手工开启终端程序。 - 内存泄露的产生 本来我们期待如果我们为一个新建的NSString *对象分配内存,我们就可以直接看到内存的泄露。这本来 是我们的目的,可是事情并非所想那样。下面这段代码在我们的测试中根本就不会产生任何内存泄露。 NSString *string = [[NSString alloc] initWithString:@Leaker]; 原因是这样的,NSString 本身是不可以修改的,我们使用了@操作符分配了字符串的内存之后,编译器帮 助我们提高了程序的效率。编译器自动把具有相同内容的字符串分配了相同的地址。 (Cocoachina 解释:也就是说 string 和@Leaker的地址通过编译器编译后,是同一个,而如果你看过 之前的文章,你就会知道”Leaker”这个字符串在程序运行期间是永远不会被释放的,这样一来,string 也就 不用释放,也就不存在内存泄露问题了。但是这仅仅是编译器的优化,并不能保证任何情况下

文档评论(0)

zhaoxiaoj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档