内存管理编程指南.docxVIP

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

介绍

无论编写任何程序,您都需要确保能够有效和高效地管理资源。程序内存就是这些资源中的一种。在Objective-C程序中,您必须确保您所创建的对象,在不再需要它们的时候被销毁。

在一个复杂的系统中,可能很难精确地确定从何时起您不再需要某个对象。Cocoa定义了一些有助于使这一抉择变得更加容易的规则和原则。

重要:在MacOSXv10.5及更高的版本中,您可以通过采用垃圾回收机制来使用自动内存管理。这一部分内容在垃圾回收编程指南中向您介绍。iOS不提供垃圾回收机制。

谁应该阅读本文档

如果您想要了解在引用计数环境中创建,复制,维护和销毁对象的相关技术及对象所有权的规则,您应该阅读本文档。

注意:如果您想要针对MacOSXv10.5或更高的版本开发新项目,在一般情况下您应该使用垃圾回收机制,除非您有充足的理由要使用本文档描述的技术。

本文档不会向您阐述分配和初始化对象以及实现初始化方法这样的细节。这些内容会在Objective-C编程语言的“分配和初始化对象”部分中进行讨论。

本文档的组织

本文档包含以下几部分:

.“内存管理规则”总结了对象所有权和销毁的规则。

.“对象的所有权和销毁”描述了基本的对象所有权策略。

.“实用内存管理”以实用性的角度透视内存管理。

.“自动释放池”描述了自动释放池—一种延迟回收的机制—在Cocoa程序中的用法。

.“存取方法”向您介绍如何实现存取方法。

.“实现对象复制”讨论有关对象复制的问题,比如如何决定是执行深拷贝还是浅拷贝,在您自己的子类中如何实现对象的复制。

.“Cocoa中CoreFoundation对象的内存管理”介绍了Cocoa代码中CoreFoundation对象的内存管理技术及使用指南。

.“Nib对象的内存管理”讨论了与nib文件相关的内存管理的问题。

内存管理规则

本文总结了Objective-C中内存管理的规则。以下是基本规则:

.您只能释放或自动释放您所拥有的对象。

如果您使用名字以“alloc”或“new”开头或名字中包含“copy”的方法(例如alloc,newObject或mutableCopy)创建了一个对象,则您会获得该对象的所有权;或者如果您向一个对象发送了一条retain消息,则您也会获得该对象的所有权。

您可以使用释放release或自动释放autorelease来释放一个对象的所有权。自动释放autorelease的意思是“将会发

送释放release消息”(要了解究竟何时发送,请参考“自动释放池”)。下面的规则是基本规则的衍生,或者是用于处理特殊边界情况的规则:

.作为基本规则的推论,如果您需要将接收到的对象存储为某个实例变量的属性,您必须保留或复制该对象。(对于弱引用来说并不是这样,详见“对象的弱引用”,但这种情况一般是很罕见的。)通常,您应该将这部分工作交给存取方法(参考“存取方法”)来处理。

.被接收的对象通常要保证在接收它的方法中仍然有效,并且该方法也可以将对象安全地返回给它的调用者。例外的情况包括多线程应用程序和一些“分布式对象”环境,然而,此时您还必须注意自己是否修改了您用来接收其它对象的对象(见“共享对象的有效性”)。在必要的时候,将保留retain与释放release或自动释放autorelease组合使用,可以防止对象因为消息的正常的边界效应而失效。

“对象的所有权和销毁”讨论了这些规则背后的推理过程。

重要:

重要:CoreFoundation对象也有类似的内存管理规则(参考CoreFoundation内存管理编程指南)。但是,Cocoa和Core

Foundation的命名规范是不同的。特别地,CoreFoundation的“CoreFoundation的内存管理编程指南”中的创建规则”并不适用于返回Objective-C对象的方法。例如,在下面的代码片段中,您无需负责释放myInstance的所有权:

MyClass*myInstance=[MyClasscreateInstance];

参考“Cocoa中CoreFoundation对象的内存管理”。

对象的所有权和销毁

对一个程序来说,最好是尽可能少地使用内存。因此,Objective-C环境中定义了一些机制和策略,允许您对程序的内存进行管理。虽然您可以从底层实现的角度

文档评论(0)

166****9181 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档