对于内存管理,是一个看似很难但是是必须掌握的。在我认为,一个优秀的程序员写出来的程序不仅要做到能用,更是好用,稳定。如果一个程序功能做的再强大,界面再美观,但是动不动就内存溢出,出错,崩溃,想必这也不能叫做一个好的程序。
在之前学java中,曾经草草的看过jvm的内存管理机制。无奈理解不深,加上一个计算机系统的基础理论不够扎实,不能融会贯通。现在有机会学习OC,想来也要把OC中内存管理的部分好好研究吃透,这样才能在未来IOS开发中不至于犯内存错误。
释放对象,可以释放它所占用的内存空间。程序员应该有良好的习惯去关注变量占用的空间。当变量不再创建或保持的时候,就释放掉对象。
注意指针对象的释放。释放指针对象的时候,特别主要该指针所指向的内存空间是否还有其他的副本。如果有两个或以上的指针指向同一段内存,当我们释放掉一个指针后,其他指针会成为无效指针,因为这段内存中的内容已经被释放掉了。
发送release消息不是释放对象。OC中使用引用计数来观察对象是否需要被释放。当对象创建的时候,对象的计数值为1.每当对象被创建或者被引用,复制时+1,当接受消息release和autorelease时-1.当对象被赋值的时候不会主动增加引用计数,需要手动增加。
自动释放池释放的时候池中的变量不一定会释放。当释放池释放的时候,会对池中所有的变量进行遍历,所有变量的引用计数减一。如果变量的引用计数为0的时候,就调用的dealloc将变量释放掉。如果引用计数不为1,则内存泄露。
上面这篇文章总结的更详细,仔细阅读后收获很多。
OC的内存管理虽然加入了一定的自动化,但是依旧不想.NET/JAVA那样的全自动管理方式。因为需要程序员更注重去把握变量的生命周期。