iOS MRC手动内存管理 心得体会

iOS MRC手动内存管理 以下是自己调试出的经验

首先注意一点:
修改代码后clean工程是必须的,但还不够,还必须卸载手机上的app,否则会导致多次调用结果和预期不一致,本人就遇到了这怪事,调试了很久才得出这个结论,应该是Xcode的bug
最好以clean后第一次运行的结果为参考,有时候会有表现不一致的情况

进入正题:
iOS的内存管理是用引用计数的概念,当一块内存的引用计数为0时,才能被系统回收复用
这里有一个很重要的概念,属性,临时变量和内存
我们真正要关心的是内存,属性和临时变量的引用计数为0,并不代表内存会被释放回收,只有真正指向的内存计数为0,才能被回收;

所以就有了release和nil的区别

release和nil的区别:

release是将对象或者临时变量指向的内存引用计数-1,当为0的时候,可以真正释放内存,对象不能再继续使用,release能改同时变属性和临时变量的引用计数, strong和retain基本上表现一致


而nil是讲对象或者临时变量本身的引用计数-1,当计数为0时,内存并不会回收,而且对象还能继续调用,所以 = nil是个风险,当内存释放后还能继续调用,但所有属性都会被置为默认值


数组的情况:

数组内的对象会随着数组release而release
但是数组无论release多少次计数都不会为0,最后计数会变成一个无效数值,此时不能再继续调用它的方法
alloc和自动释放池的对象表现差不多
自动释放池的对象无论release多少次,都不会为0,直到pool drain,
当计数变为一个无效数值时不能继续调用它的方法


最后给大家一点建议:
在开发iOS时,mrc和arc混编的情况下,mrc对象很容易泄露,除非是独立的工具类;
在复用性且频繁clone的对象一定不要使用混编,一定会造成内存泄露,最好都改为一致的管理方式
arc方式坚决推荐



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值