关于OC中得内存管理问题,alloc,retain,release,copy,dealloc

    我们都知道,一个手机,它的内存是有限的,而每一个手机应用都是需要一定空间,当应用所占空间过大时,系统就会发出警告,怎样在有限的空间中,做到更高效实用美观的效果呢?

这时候就牵涉到OC中得内存管理了.

     在OC这门语言中,是不存在垃圾回收机制的,但是它采用了另外一种形式或者说方法,实现这一个空间回收的效果,那就是引用计数器.

     别看-引用计数器,这个名字很高大上,实际是它就是一个整数.

     所以OC中分配4个字节才存储它.

      引用计数的值只有两种:0和非0,我们知道,计算机其实是很笨的,结果只有这两种时,它才能判断,结果多了,它也会糊涂的.

    当引用计数=0,系统就会销毁空间,

     当引用计数!= 0,系统才会保留空间.

但是,!=0,中包含1.2.3....,一系列的整数,这时候就要用到我们的retain.

 在解释retain之前,我先说一下alloc,系统可以销毁空间,但是没有空间,系统谈何销毁?而这个alloc的作用就是创建空间,它使对象的引用计数由 "没有" - 1,注意:是没有到1,而不是0到1.

接下才用一个现实中的例子说明更有趣点:

    我假设:创建的对象是条狗,有甲,乙,丙,丁,四个人

    alloc ---- (甲买了一条狗,并有一根绳子开始遛狗)---计数为1

    retain --- (乙也想遛狗,于是也找了一条绳子,拴在狗身上) ---计数+1变为2

    retain--(丙要喜欢这条狗,于是也找了条绳子,一起遛狗)----计数+1变为3.

    

这时候,丁看见了,也想遛狗,可是看这条狗已经有三个人溜了,太可怜了,于是他自己到花鸟市场买了一个一模一样的狗,自己一个人溜就是copy.计数+1,这后这个对象的计数只是1,原来对象还是3,没有发生变化.

   但甲乙丙三个人都回家吃饭了,每走一个人,就会少一根绳子,3-1-1-1,当为0时,我们无孔不入的城管就会感应到某某地方有条流浪狗,马上有人过来将这条狗收走,这时候就是dealloc.


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值