突破Objective-C开发速学手册之内存管理.ppt_第1页
突破Objective-C开发速学手册之内存管理.ppt_第2页
突破Objective-C开发速学手册之内存管理.ppt_第3页
突破Objective-C开发速学手册之内存管理.ppt_第4页
突破Objective-C开发速学手册之内存管理.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 内存管理,内存管理,是指软件在运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。本章主要讲解基础的内存管理、引用计数和垃圾回收等相关方面的知识。,9.1 内存管理的基础,内存管理主要是内存空间的申请和释放。当我们申请了内存空间再不使用后一定要释放,否则,其他的数据不能使用这块空间就会造成资源的浪费。本节主要讲解两个基本的内存管理申请内存和对堆存的释放。,9.1.1 申请内存(alloc),alloc称为申请内存。它的功能是为内存分配空间。,9.1.2 释放内存(dealloc),当我们对申请的内存空间使用完成后,一定要对

2、这块空间释放。释放内存主要分为两种。,1.release,release是内存释放中的手动释放。,2.autorelease,autorelease为自动释放内存。,2.autorelease,2.autorelease,9.2 引用计数,每一个从NSObject继承的对象都继承了一定的内存管理行为。在这些对象的内部存在一个称为保留计数的计数器。当使用alloc或者copy方法创建一个对象时,计数器的值为1。调用retain时,计数器的值加1,而调用release时,计数器的值就减1。当对象的计数器为0时,该对象及其相应的内存就可以被释放啦。,9.2 引用计数,9.2 引用计数,9.2.1 引

3、用计数和字符串,如果alloc和copy了一个字符串,在方法结束时需要用release或者autorelease这个字符串。当使用alloc()、copy()、release()、utorelease()的时候,字符串的引用计数也会发生改变。,9.2.2 引用计数和实例变量,我们在处理实例变量时,必须要注意实例变量的引用计数。当使用retain和copy时实例变量的引用计数加1。,9.3 自动释放池,自动释放池(Autorelease pool)是OC的一种内存自动回收机制,可以将一些临时变量通过自动释放池来回收统一释放。本节主要讲解自动释放池和她与应用计数之间的关系。,9.3.1 自动释放池

4、,通过autorelease自动释放的功能,Objective-C有了以一种自动释放池的形式将其内存释放。,9.3.1 自动释放池,9.3.2 建立多个自动释放池,在我们的程序中释放池不仅可以只有一个,而且我们好可以为它建立多个自动释放池。,9.3.3 引用计数和自动释放池,我们要想将类中的对象放到释放池中,必须通过使用autorelease,对象才可以被放入自动释放池中。,9.4 内存管理规则及内存泄露,世界上,不管是人还是动物都要遵守一定的规则,所以内存管理也不会另外。它遵守的规则称为内存管理规则,有了内存管理规则就不会造成内存的泄露,导致资源的浪费。本节将主要讲解内存管理规则和内存泄露等

5、方面的内容。,9.4.1 内存管理规则,所谓内存管理规则就是在内存中要遵守的一系列规则,我们必须牢牢遵守,才不会使资源遭到不必要的浪费。,1.使用规定的方法创建对象,当使用new()、alloc()、copy()方法创建一个对象时,该对象的保留计数器值为1。当不再使用该对象时,开发人员要负责向该对象发送一条release或autorelease消息。这样,该对象将在其使用寿命结束时被销毁。,2.其他方法创建对象,当通过其他方法获得一个对象时,假设该对象的保留计数器值为1,而且已经被设置为自动释放,开发人员不需要执行任何操作来确保该对象被清理。如果你打算在一段时间内拥有该对象,这需要保留它并确保

6、在操作完成时释放它。,3.保持一致,在一定的代码段中,使用copy(),alloc()和retain()的次数应该和release(),autorelease()保持一致。,9.4.2 内存泄露,当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。,9.5 垃圾回收,垃圾回收(Garbage Collectionji简称GC)是Objective-C提供的一种自动内存回收机制。它可以让程序员减轻许多内存管理的负担,即无需再使用release和autorelease。在程序的声明周期中,系统负责自动回收没有引用或相连的对象所占用的内存,这种内存回收的过程就叫垃圾回收。 Apple在OS10.5里追加了这个功能。首先我们先将垃圾回收开启。单击项目文件,再选项卡中选择“Build Settings”按钮,在按下“ALL”按钮,选择“Apple LLVM compiler 3.0 Language”中的“Objective-C Garbage Collection”选项,将其设置改为“Unsuppored”选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论