A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© coyote 中级黑马   /  2014-9-28 22:17  /  1511 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能具体解释一下垃圾回收和ARC的区别。我知道OC中没有垃圾回收,但是不是特别理解自动内存管理与垃圾回收机制的不同之处。希望解释得详细一点。谢谢!

1 个回复

倒序浏览
自己去查了一些资料,下面总结一下ARC和垃圾回收的区别。如果有错误的地方,还请大家指出和补充。谢谢!
1.什么是垃圾回收。java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是“无用信息”,这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾回收也可以清除记录碎片。

2.OC不支持垃圾回收。需要程序员编写代码来释放对象占用的内存或者开启ARC自动管理内存。
3.自动内存管理,即ARC,不同于垃圾回收。编译器中包含了内存管理原则,ARC下,只能简单地由它自己来调用,无法帮助程序员查找错误。
4.ARC介于自动垃圾回收和手动内存管理之间。ARC无法处理对象之间由于互相强引用引起的循环引用,导致两个对象永远都不能被释放掉。因此在ARC下,需要程序员自己去避免循环引用的发生。
5.ARC不是强制的,这一点不同于垃圾回收。在一个程序里,如果支持垃圾回收,即所有的代码都使用垃圾回收机制,如果不支持,就不都能使用。但是ARC和MRC却可以同时出现在同一个程序的代码中。这一点使得程序的稳定性,兼容性都较之垃圾回收更强一些。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马