堆的内存管理:
我们所说的内存管理,其实就是堆的内存管理。因为栈的内存会自动回收,堆的内存需要我们手动回收。
栈中一般存储的是基本数据类型变量和指向对象的指针(对象的引用),而真实的对象存储在堆中。因为栈结构的缘故,它是严格地存储在栈数据结构中的,其中数据的生命周期结束后内存都会被回收。此时,对象的引用已经被回收了,但是对象还存在于堆中,这便造成了内存泄露。
引用计数器:(ratainCount)
每个对象都有引用计数器,在每个对象内部都有块内存存储它。顾名思义,引用计数器代表该对象被引用的次数,即有多少地方在使用该对象。
当一个对象刚被创建时,引用计数器为1;每多一个引用,引用计数器就+1 (retain);每少一个引用,引用计数器就 -1(release)。
经过一番增减后,当引用计数器等于0时,该对象就被销毁,所占内存被回收。(自动调用dealloc方法,一般需重写它,在里面释放一些资源。)
注意:retainCount=0是判断对象是否该销毁的唯一依据
对象被销毁后,就不能再访问它了,不然会报野指针错误。
内存管理的原则:
有创建就有销毁,谁创建谁销毁;有retain就有release,谁retain就谁release。
待续。。。
有几篇博客总结得很详细: