码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-22 22:06:30      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:ios开发

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

这时候就牵涉到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.


  

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

标签:ios开发

原文地址:http://blog.csdn.net/lunlun426/article/details/40381613

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!