ios开发内存管理编程指南

ios开发内存管理编程指南

ID:9851294

大小:112.82 KB

页数:35页

时间:2018-05-12

ios开发内存管理编程指南_第1页
ios开发内存管理编程指南_第2页
ios开发内存管理编程指南_第3页
ios开发内存管理编程指南_第4页
ios开发内存管理编程指南_第5页
资源描述:

《ios开发内存管理编程指南》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、内存管理编程指南介绍无论编写任何程序,您都需要确保能够有效和高效地管理资源。程序内存就是这些资源中的一种。在Objective-C程序中,您必须确保您所创建的对象,在不再需要它们的时候被销毁。在一个复杂的系统中,可能很难精确地确定从何时起您不再需要某个对象。Cocoa定义了一些有助于使这一抉择变得更加容易的规则和原则。重要:在MacOSXv10.5及更高的版本中,您可以通过采用垃圾回收机制来使用自动内存管理。这一部分内容在垃圾回收编程指南中向您介绍。iOS不提供垃圾回收机制。谁应该阅读本文档如果您想要了解在引用计数环境中创建,复制,维护和销毁对象的相关技术及对象所有权的规则,您应该阅读本文档

2、。注意:如果您想要针对MacOSXv10.5或更高的版本开发新项目,在一般情况下您应该使用垃圾回收机制,除非您有充足的理由要使用本文档描述的技术。本文档不会向您阐述分配和初始化对象以及实现初始化方法这样的细节。这些内容会在Objective-C编程语言的“分配和初始化对象”部分中进行讨论。本文档的组织本文档包含以下几部分:§“内存管理规则”总结了对象所有权和销毁的规则。§“对象的所有权和销毁”描述了基本的对象所有权策略。§“实用内存管理”以实用性的角度透视内存管理。§“自动释放池”描述了自动释放池—一种延迟回收的机制—在Cocoa程序中的用法。§“存取方法”向您介绍如何实现存取方法。§“实现

3、对象复制”讨论有关对象复制的问题,比如如何决定是执行深拷贝还是浅拷贝,在您自己的子类中如何实现对象的复制。§“Cocoa中CoreFoundation对象的内存管理”介绍了Cocoa代码中CoreFoundation对象的内存管理技术及使用指南。§“Nib对象的内存管理”讨论了与nib文件相关的内存管理的问题。内存管理规则本文总结了Objective-C中内存管理的规则。以下是基本规则:§您只能释放或自动释放您所拥有的对象。§如果您使用名字以“alloc”或“new”开头或名字中包含“copy”的方法(例如alloc,newObject或mutableCopy)创建了一个对象,则您会获得该对

4、象的所有权;或者如果您向一个对象发送了一条retain消息,则您也会获得该对象的所有权。§您可以使用释放release或自动释放autorelease来释放一个对象的所有权。自动释放autorelease的意思是“将会发送释放release消息”(要了解究竟何时发送,请参考“自动释放池”)。下面的规则是基本规则的衍生,或者是用于处理特殊边界情况的规则:§作为基本规则的推论,如果您需要将接收到的对象存储为某个实例变量的属性,您必须保留或复制该对象。(对于弱引用来说并不是这样,详见“对象的弱引用”,但这种情况一般是很罕见的。)通常,您应该将这部分工作交给存取方法(参考“存取方法”)来处理。§被接

5、收的对象通常要保证在接收它的方法中仍然有效,并且该方法也可以将对象安全地返回给它的调用者。例外的情况包括多线程应用程序和一些“分布式对象”环境,然而,此时您还必须注意自己是否修改了您用来接收其它对象的对象(见“共享对象的有效性”)。在必要的时候,将保留retain与释放release或自动释放autorelease组合使用,可以防止对象因为消息的正常的边界效应而失效。“对象的所有权和销毁”讨论了这些规则背后的推理过程。重要:CoreFoundation对象也有类似的内存管理规则(参考CoreFoundation内存管理编程指南)。但是,Cocoa和CoreFoundation的命名规范是不同

6、的。特别地,CoreFoundation的“CoreFoundation的内存管理编程指南”中的创建规则”并不适用于返回Objective-C对象的方法。例如,在下面的代码片段中,您无需负责释放myInstance的所有权:MyClass*myInstance=[MyClasscreateInstance];参考“Cocoa中CoreFoundation对象的内存管理”。对象的所有权和销毁对一个程序来说,最好是尽可能少地使用内存。因此,Objective-C环境中定义了一些机制和策略,允许您对程序的内存进行管理。虽然您可以从底层实现的角度去考虑Objective-C程序的内存管理(详见“幕后

7、:保留计数”),但是通常从对象所有权的角度来考虑这个问题会更容易。在 Objective-C 程序中,对象会被创建和销毁。为了确保您的应用程序不会使用不必要的内存,对象应该在不需要它们的时候被销毁。当然,在需要对象时保证它们不被销毁也很重要。为了满足这些需求,Cocoa定义了一种机制—对象所有权,通过该机制您可以指定您何时需要使用一个对象,又在何时完成对该对象的使用。为了充分理解对象所有权策略在Cocoa中是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。