首页 > 代码库 > 关于OC中得内存管理问题,alloc,retain,release,copy,dealloc
关于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.
关于OC中得内存管理问题,alloc,retain,release,copy,dealloc