A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学到内存管理的时候有个地方非常不解,到底retain的意义是什么,对象中的计数器的数量需要人工操作的吗,我们retain的意思是否为了方便我们自己来计算呢?还是计数器不会自动改变?

6 个回复

倒序浏览
因为OC的内存管理就是根据引用计数来的,引用计数为0的对象会被清除掉,你说引用计数重要不?
回复 使用道具 举报
内存可以自动释放,但是容易错,搞个计算器,人为管理,严谨些,然后发明oc的那家伙就设计了个return,哈哈,猜的,个人理解吧
回复 使用道具 举报
可以这样解释么? 我们去饭店吃饭,一张桌子上有两个人在吃,走了一个, 服务员看到还有一个人在,那他是不能收拾桌子的。又来了两个,那他就更不能收拾了,直到人走光了。桌子上人数为0,那么OK,可以对桌子进行清理了!
回复 使用道具 举报
计数器不会自动改变。对象创建后引用计数器默认为1,这时已经有一个指针指向它,以后每一个指针再指向这个对象都要retain一次把计数器加1,也就是说引用计数器和指向对象的指针数是相同的。所以同理每当减少一个指向对象的指针,我们都要做一次release让计数器减1,当计数器减到0的时候,程序就知道这个对象没有人用了,就会释放对象的内存空间。
回复 使用道具 举报
本帖最后由 小月格子猫 于 2014-9-6 21:16 编辑

1  现在Xcode有ARC可以帮你自动管理内存,但是以前没有
2  做程序的时候,肯定是以最优考虑,而对于内存方面的管理,就是优化的体现
3  释放掉用不到的对象,留下用的到,如果判断一个对象是否还有用呢??就看它的计数器
4  用一次,加一次,计数器是几就代表有几个人用它,谁不用谁就减1,为0的时候就释放它的内存,代表它没用了
5  你可能会好奇,为什么不直接在后面一下全部释放,多简单,我也不加它,它计数器就只有个1,
    你这样想就错了,要知道做程序的时候,代码是很长的很长的,能早释放就释放,最好是没用的时候就释放它     //  如果不懂,在询问

回复 使用道具 举报
小月格子猫 发表于 2014-9-6 21:11
1  现在Xcode有ARC可以帮你自动管理内存,但是以前没有
2  做程序的时候,肯定是以最优考虑,而对于内存方 ...

透彻啊~~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马