- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 也就
不用释放,也就不存在内存泄露问题了。但是这仅仅是编译器的优化,并不能保证任何情况下
您可能关注的文档
最近下载
- 新款GC9790II型色谱仪说明书.pdf VIP
- 2025山东省环保发展集团有限公司业务中心及双碳业务板块招聘笔试模拟试题及答案解析.docx VIP
- 标准图集-04G101-3 筏形基础.PDF VIP
- (高清版)B-T 4798.3-2023 环境条件分类 环境参数组分类及其严酷程度分级 第3部分:有气候防护场所固定使用.pdf VIP
- 高中英语教学竞赛公开课、高考复习课件——2025年高考新课标一卷读后续写详析及参考范文专项课件.pptx VIP
- 安装工培训课件.pptx VIP
- 西安航空学院辅导员招聘考试备考真题题库汇编.pdf VIP
- 《蒸汽管道竣工全套资料表格》.docx VIP
- 《油气储存企业安全风险评估细则(2025年修订版)》解读与培训.pptx VIP
- 上海市交通大学附属中学2021届高三9月开学考试英语试题.docx VIP
文档评论(0)