探讨OC中的内存管理

对于内存管理,是一个看似很难但是是必须掌握的。在我认为,一个优秀的程序员写出来的程序不仅要做到能用,更是好用,稳定。如果一个程序功能做的再强大,界面再美观,但是动不动就内存溢出,出错,崩溃,想必这也不能叫做一个好的程序。

在之前学java中,曾经草草的看过jvm的内存管理机制。无奈理解不深,加上一个计算机系统的基础理论不够扎实,不能融会贯通。现在有机会学习OC,想来也要把OC中内存管理的部分好好研究吃透,这样才能在未来IOS开发中不至于犯内存错误。

释放对象,可以释放它所占用的内存空间。程序员应该有良好的习惯去关注变量占用的空间。当变量不再创建或保持的时候,就释放掉对象。

注意指针对象的释放。释放指针对象的时候,特别主要该指针所指向的内存空间是否还有其他的副本。如果有两个或以上的指针指向同一段内存,当我们释放掉一个指针后,其他指针会成为无效指针,因为这段内存中的内容已经被释放掉了。

发送release消息不是释放对象。OC中使用引用计数来观察对象是否需要被释放。当对象创建的时候,对象的计数值为1.每当对象被创建或者被引用,复制时+1,当接受消息release和autorelease时-1.当对象被赋值的时候不会主动增加引用计数,需要手动增加。

自动释放池释放的时候池中的变量不一定会释放。当释放池释放的时候,会对池中所有的变量进行遍历,所有变量的引用计数减一。如果变量的引用计数为0的时候,就调用的dealloc将变量释放掉。如果引用计数不为1,则内存泄露。

详细教程

上面这篇文章总结的更详细,仔细阅读后收获很多。

OC的内存管理虽然加入了一定的自动化,但是依旧不想.NET/JAVA那样的全自动管理方式。因为需要程序员更注重去把握变量的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值