



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
假定有两个Person的实例,每个都有一个指针成员变量favoriteColor, 指向一个颜色对象。假如两个人喜欢同样的颜色,这两个实例就会指向同一个颜色对象。随着年纪的变化,每个人喜欢的颜色可能会发生改变,最后,原来的颜色对 象可能就没有人使用了。如图1-1 图1-1 谁都不希望这个“孤儿”颜色继续留在程序中占用内存空间,而是希望对内存重新分配,能将新的对象放到那个存储区域。但是,开发者需要确保释放的颜色对象已经没有人再使用了。对此,Apple使用了三种方法来解决: 采用手动引用计数,即retain计数:每个对象都有一个retain计数,表示指向它的其他对象的个数。假如某个颜色时两个人都喜欢的颜色,那么retain计数就是2。当retain计数变为0时,该对象就被释放。 在Mac OS 10.5系统中,针对Objective-C引入了垃圾回收机制(GC)。垃圾回收机制监视整个对象关系图,查找那些在作用域内已经没有任何对象指向的对象,将自动释放这些对象。 最新的解决方案是,在Mac OS 10.7和iOS 5中引入自动引用计数(自动内存管理机制,ARC),ARC依靠最初的retain计数机制,但有些不同,即编译器管理程序的retain计数管理档案。(目前在XCODE中的工程模板中是默认使用ARC) 其实,ARC是某种程度上的折中,因为手动引用计数需要手动进行,增加工作量,开发者需要显式保存对象的访问,还需要在对象不再使用时显式的进行释 放。假如不小心使用,retain计数机制将产生麻烦的后果:对象A retain对象B,而B又retain A ,这样就产生了永远删不掉的内存孤岛,因为它们还互相retain着的。这就是retain循环。图1-2即retain循环的例子: 图1-2 而垃圾回收机制看似很合理,但却产生性能消耗:它需要占用CPU时间来扫描对象,查找垃圾。这有时会让应用程序产生很差的或者不稳定的性能表现。例 如:在一个需要稳定表现得应用程序里面(如一个动作游戏)或者需要实时进行渲染并回放的视频播放,垃圾回收机制可能因扫描引起程序短暂的停顿。此外,垃圾 回收机制还不能管理手动分配的内存(例如使用malloc()函数,没有特别的方法)。垃圾回收机制不能运行在Mac OS 10.5以前的版本上,也不能移植到iOS上,这些都不支持垃圾回收机制。 ARC(Automatic Reference Counting)提供一个很好的解决方案既获得了手动引用管理的速度和效率,也享有使用垃圾回收机制带来的便利。但是ARC并不完美,它不能解决 retain循环的问题,像垃圾回收机制一样,不能管理手动分配的内存。手动内存管理 retain计数是一个相当简单的概念,Objective-C中的每一个对象都有一个retain计数。retain计数是一个整数。使用alloc函 数创建一个对象时,该对象的retain计数设为1。当retain计数变为0时,对象就被释放。一般通过发送retain消息给对象,从而增加对象的 retain计数;发送release给对象,则减少retain计数的值。 一个对象的retain计数表示该对象被多少个其他的对象引用,当retain计数变为0时,表明已经没有其他对象关心这个对象了,就要被释放掉,腾出内存空间。 Retain计数机制可以让程序员很方便的控制对象怎么释放以及何时释放,但需要非常小心。如果一个对象被多次释放,那么这个对象很有可能被提前释放,程序就会崩溃:如果多次retain一个对象,那么这个对象将永远不会被释放,就会浪费内存。手动管理主要三种方式:retain、release和autorelease。使用ARC ARC是编译器的一个功能,与支持代码静态分析机制一样。当开发者编译应用程序时,编译器将检查Objective-C对象指针(也叫引用)的用法,然后 应用retain规则,进行retain计数、释放和自动释放的检查,确保对象在需要时能够正确存在,在不需要时被重新分配。强引用 默认情况下的引用都是强引用,假如一个对象被分配为强引用,ARC则认为该对象就在附近,并且retain也是隐式的。假如将引用改变为一个新的值,旧的对象被释放,新的对象被retain。弱引用 弱引用与旧的手动引用计数类似:没有隐式的retain,指针值只在内存中修改。然而这样的引用一直是引起程序崩溃的原因。假如指针没有被retain, 这个对象就被重新分配,那么将留
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校常驻大使管理制度
- 商场音响设备管理制度
- 医院网络使用管理制度
- 小区活动安全管理制度
- 发电公司绿化管理制度
- 年终绩效分配管理制度
- JJF(蒙)119-2025 烷基汞分析仪校准规范
- 2025年小学语文四年级下册教学设计之语文园地六
- 科学-2024-2025学年五年级科学下学期期末提升卷
- 亳州职业技术学院《城市道路设计》2023-2024学年第二学期期末试卷
- 2024 - 2025学年一年级下册道德与法治期末考试卷附答案(三套)
- 2024年不动产登记代理人《地籍调查》考试题库大全(含真题、典型题)
- 《公路工程预算定额》(JTGT3832-2018)
- 重庆市(2022年-2023年)初中结业考试地理试题及答案
- 盘扣支模架工程监理细则
- 最新小学生成长记录(课堂PPT)
- LNG饱和曲线图
- 地质灾害治理工程施工记录用表(最新整理
- 水池满水试验记录表(自动计算)
- 山洪灾害防御
- 国家开放大学《管理英语1》边学边练参考答案
评论
0/150
提交评论