黑马程序员技术交流社区
标题:
大家有没有想过,为什么要retain让计数器加1?
[打印本页]
作者:
3677065
时间:
2014-9-4 08:22
标题:
大家有没有想过,为什么要retain让计数器加1?
学到内存管理的时候有个地方非常不解,到底retain的意义是什么,对象中的计数器的数量需要人工操作的吗,我们retain的意思是否为了方便我们自己来计算呢?还是计数器不会自动改变?
作者:
fantacyleo
时间:
2014-9-4 12:42
因为OC的内存管理就是根据引用计数来的,引用计数为0的对象会被清除掉,你说引用计数重要不?
作者:
SailY
时间:
2014-9-4 16:36
内存可以自动释放,但是容易错,搞个计算器,人为管理,严谨些,然后发明oc的那家伙就设计了个return,哈哈,猜的,个人理解吧
作者:
xiniuniu
时间:
2014-9-6 13:26
可以这样解释么? 我们去饭店吃饭,一张桌子上有两个人在吃,走了一个, 服务员看到还有一个人在,那他是不能收拾桌子的。又来了两个,那他就更不能收拾了,直到人走光了。桌子上人数为0,那么OK,可以对桌子进行清理了!
作者:
reinvent
时间:
2014-9-6 14:24
计数器不会自动改变。对象创建后引用计数器默认为1,这时已经有一个指针指向它,以后每一个指针再指向这个对象都要retain一次把计数器加1,也就是说引用计数器和指向对象的指针数是相同的。所以同理每当减少一个指向对象的指针,我们都要做一次release让计数器减1,当计数器减到0的时候,程序就知道这个对象没有人用了,就会释放对象的内存空间。
作者:
小月格子猫
时间:
2014-9-6 21:11
本帖最后由 小月格子猫 于 2014-9-6 21:16 编辑
1 现在Xcode有ARC可以帮你自动管理内存,但是以前没有
2 做程序的时候,肯定是以最优考虑,而对于内存方面的管理,就是优化的体现
3 释放掉用不到的对象,留下用的到,如果判断一个对象是否还有用呢??就看它的计数器
4 用一次,加一次,计数器是几就代表有几个人用它,谁不用谁就减1,为0的时候就释放它的内存,代表它没用了
5 你可能会好奇,为什么不直接在后面一下全部释放,多简单,我也不加它,它计数器就只有个1,
你这样想就错了,要知道做程序的时候,代码是很长的很长的,能早释放就释放,最好是没用的时候就释放它 // 如果不懂,在询问
作者:
himym2005
时间:
2014-9-6 22:12
小月格子猫 发表于 2014-9-6 21:11
1 现在Xcode有ARC可以帮你自动管理内存,但是以前没有
2 做程序的时候,肯定是以最优考虑,而对于内存方 ...
透彻啊~~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2