@
akinoniku 内存管理没什么神秘的。申请了就得释放,谁来释放以及什么时候释放。C都是自己手工完成。新的语言基本上都有自己的一套方便的东西。
一个对象实例,会在出生时,申请一份内存空间。当这个对象完成它的使命时,就可以释放掉它占用的空间。对象存在作用域中,一般来说,出了作用域,这个对象就不需要了,可以删了。还有种情况,这个对象有其它作用域中的引用。就是说其它作用域中,有指向同一内存空间的一个东西。那么这时候,这块内存空间就不能随便释放了。必须等到没有东西指向它(即引用它)时,它才可以被释放。那么怎么知道有没有东西引用这块内存呢,就可以用个计数器。内存刚申请时,计数器为1,引用一次,加1。释放时(主要是出作用域时的隐性释放),先给计数器减一,等计数器为0时,才真的去释放这块内存。这就是内存管理上的引用计数技术。在ObjC中,有设计好的计数器和语法方便你使用这一技术。而C++这种原始的语言,需要自己写计数器,需要手工减1(也可以用一些语法特性把这事弄简单点)。
Java则使用了重型的扫描式垃圾回收,所以它的内存释放总是不那么及时。
引用计数是目前最好的内存管理技术,方便、高效、可控。而且,没有这个技术,想实现离散的对象控制,只能用别的GC技术了。
不过,自动引用计数是5开始才有的东西。5之前得自己动手。