oc有垃圾回收机制吗?arc和垃圾回收机制的区别?

编程语言及工具

104人已加入

描述

  oc有垃圾回收机制吗?

  在C#中都有GC在自动管理内存,但是在OC中没有垃圾回收机制,那么OC中内存又是如何管理呢?其实在OC中内存的管理是依赖对象引用计数器(reference counting)来进行的。

  OC中每个对象都有一个与之对应的整数,叫“引用计数器”,当一个对象在创建之后它的引用计数器值加1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器值自动在原来的基础上加1,当调用这个对象的release方法之后它的引用计数器值减1,如果一个对象的引用计数器值为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。
oc语言

  arc和垃圾回收机制的区别?

  ARC计数的基本概念

  ARC自动引用计数(automatic reference counting),当你在编译程序时提供自动管理内存的功能,

  它会为程序自动加入内存的控制代码,控制独享声明周期。这样一来,就可以简化内存管理步骤。

  不过支持的版本是在iOS4,iOS5以上

  注意创建项目的时候,勾选ARC功能

  垃圾回收机制的基本概念

  与Java语言相同Objective-c 2.0之后,也提供了垃圾回收机制。但是在iOS移动终端设备中,并不

  支持垃圾回收机制。因此,iPhone并不能对内存进行自动垃圾回收处理(autorelease)。因此需要注意

  垃圾回收机制并不是ARC,ARC也是需要管理内存的,只不过是隐式的管理内存,编译器会再适当的地方

  自动插入retain,release和autorelease消息。

  ARC介于自动垃圾回收(GC)和手动内存管理之间。就像垃圾回收,ARC让程序员不再需要书写retain/release/autorelease语句。但它又不同于垃圾回收,ARC无法处理retaincycles。在ARC里,如果两个对象互相强引用(strong references)将导致它们永远不会被释放,甚至没有任何对象引用它们。

  因此,尽管ARC能免去程序员大部分内存管理问题,但仍然要程序员自己避免retaincycles或手动打断对象之间的retain循环。

  ARC和苹果的垃圾回收之间还有一个重要的不同:ARC不是强制的。而对于苹果的垃圾回收,要么整个程序都使用,要么都不用。也就是说在app中的所有O-C代码,包括所有的苹果框架和所有的第3方库必须支持垃圾回收,才能使用垃圾回收。相反,ARC和非ARC代码可以在一个app中和平共处。这使得将项目可以零星地迁移到ARC 而不会像垃圾回收起初遇到的各种兼容性和稳定性的问题。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分