IOS 学习 之 引用计数

之前在一个博客上面很生动形象的解释了引用计数的意思,对于IOS开发初学者来说,是非常有益的。原文是这样说的。


来说一下引用计数  比如上班,  最早进入办公室的人需要开灯,之后进入办公室的人需要照明, 下班离开办公室的人不需要照明,最后离开办公室的人需要关灯。
这样对应的引用计数就是:第一个人进入办公室开灯,引用计数是1.  之后进入办公室需要照明  引用计数是2 。  下班一个人离开办公室 引用计数变成了1  最后一个离开了办公室,引用计数变成了0 。

童鞋们,,这个解释,应该很好理解。下面我们在补充说明一下。

其实,引用计数是对内存区域的空间管理方式,是应从内存块的视角去看的。任何对象都是指向它的指针,有多少个指针指向它,就有多少个引用计算。

   如果没有任何指针指向该内存块了,很明显,该内存块就没有对象引用了,引用计算就是 0, 系统会人为该内存区域已经空闲,于是立即清理,也就是更新一下管理堆的链表中某个标示位。


在内存管理中:  自己生成的对象,自己持有。  
                          不是自己生成的对象,自己也能持有。 
                          不再需要自己持有的对象就是放。 
                          不是自己持有的对象无法释放。
生成并持有对象:alloc/new/copy/mutableCopy     
          持有对象:retain  
          释放对象: release  
          废弃对象: dealloc
这些内存管理是在 cocoa框架 中的foundation框架类库的NSObject类担负的。
autorelease 是使对象在超出指定的生存范围时能够自动并正确地释放。
我们在释放对象的时候,不能释放不是自己持有的对象。
ex:   
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //自己生成并持有对象  
  2. id obj = [[NSObject alloc] init];  
  3. //自己持有对象  
  4. [obj release];  
  5. //对象已释放  
  6. [obj release];  
  7. //释放之后再次释放已非自己持有的对象,应用程序崩溃。       
  8. //崩溃情况: 再度废弃已经废弃了的对象时崩溃,    访问已经废弃的对象时崩溃  
  9.   
  10. 我们取得对象,但是自己不持有对象:  
  11. //取得对象,但是自己并不持有对象  
  12. id obj1 = [obj0 object];  
  13. //释放不是自己持有的对象,应用程序崩溃  
  14. [obj1 release];  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值