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

© Micro   /  2015-3-9 15:19  /  5730 人查看  /  63 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

还没学到这里,哎。
回复 使用道具 举报
ideal 中级黑马 2015-3-10 12:55:16
22#
谁Retain谁release
回复 使用道具 举报
sydie 中级黑马 2015-3-10 13:57:35
23#
才刚开始学,感觉应该是内存是有限的,不能无限存放,通过释放回收不需要的数据,获得更多的空间。
回复 使用道具 举报
刚刚看到这个附近  以前学习java 貌似高级点的语言内存是自己管理的。垃圾回收机制嘛。不需要我们操作。。

我们所创建对象,并持有对象都会占据内存空间,对象内部存在一个计数器初始时候为1,当被撤销时候为0调用dealloc。其中copy,alloc和retain的操作都会持有对象并导致计数器数值+1.对应-1的有release和 autorelease。。

如李老师讲的。。原则是调用谁释放。。注意copy alloc retain和release  aoturelease的对应。。同一段代码段内增减次数应该相等。。。。

浅见。。刚看完。。。

评分

参与人数 1黑马币 +4 收起 理由
Micro + 4 很给力!

查看全部评分

回复 使用道具 举报
madam 初级黑马 2015-3-10 14:53:35
25#
提示: 该帖被管理员或版主屏蔽
回复 使用道具 举报
感觉是历史遗留问题,现在有arc,内存我(菜鸟)觉得没必要太关注了
回复 使用道具 举报
Ammar 中级黑马 2015-3-10 15:20:44
27#


    每个OC对象都有一个自己的引用计数器,表示其被引用的次数,当对象被创建时,默认计数器值为1。每个OC对象内部都有专门的4个字节的空间存储计数器。若果要使用某个对象,就必须对该对象发出Retain消息,该对象内部的引用计数器就会+1。而相应的,若不用某个对象,就必须确保该对象所占用的内存空间被回收(节省珍贵的移动设备内存空间),即对该对象发出Release消息,该对象的引用计数器就会-1。retaincount可获取对象当前的引用计数器的值,当对象的引用计数器值为0时,对象被销毁,同时其所占内存空间被系统回收。一旦对象被回收,其所占的内存空间就不可使用,强行使用会导致野指针错误。
    OC内存管理的原则是谁上的厕所谁冲干净,曾经让某个对象的引用计数器+1,就该在最后让其-1。谁在开始alloc,new,copy创建的对象,谁在最后就要通过release或者autorelease释放内存。谁调用了retain方法,无论这个对象是如何生成,在最后都要通过调用release方法。
    release用于对于占用内存较大的对象使用,达到精确控制的效果,而autorelease的使用对于占用较小内存的对象来说,可以不用考虑什么时间释放对象。

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 很给力!

查看全部评分

回复 使用道具 举报
还没开始学习oc,但是我猜测是,oc会极大的优化内存,把用不到的内存尽可能的释放,以保证程序运行的流畅性。

评分

参与人数 1黑马币 +1 收起 理由
Micro + 1 加油

查看全部评分

回复 使用道具 举报
刚开始看oc呢,没法拿黑马币了--
回复 使用道具 举报
今天刚好看到OC的内存管理这里,就来说说我的看法吧.因为和JAVA不一样,JAVA是具有自己内存回收机制的,但是OC没有这个机制.
我们通常使用的移动设备,内存都比较有限,如果我们不进行内存回收,那么设备运行程序就会越来越卡,甚至闪退等等.
这时我们就需要回收我们程序中,已经不再使用的内存空间,比如一些不再使用的对象或者变量.
当然,这个收回还是得遵循一定的原则的:首先就是只要还有对象在使用这个内存空间,那么我们就不能进行回收,只要我们还需要使用这个对象,那么就应该让这个对象的内存计数器加1,当不用的时候,就减1.其次就是,谁创建了,谁来release,也就是说如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法,如果不是你创建的,
那么就不用你来管理.
再者就是只要你调用了retain,无论这个对象时如何生成的,你都要调用release.
大概我暂时理解就是这么多吧,总之就是有始有终,有借有还,再借不难.:lol



评分

参与人数 1技术分 +2 收起 理由
Micro + 2 很给力!

查看全部评分

回复 使用道具 举报
谁创建,谁释放。如果通过alloc、new或copy来创建一个对象,那么你必须调用autorelease或在使用完成时调用release,不是你创建的,就不用你去释放。

评分

参与人数 1黑马币 +1 收起 理由
Micro + 1 太简单

查看全部评分

回复 使用道具 举报
首先,OC内存管理是针对手机内存紧张、内存泄露等情况而必须实施的。
用概念的方法来说,OC对象被引用的次数可以用整数来表示,我们将它称为引用计数器。
初始创建时,OC对象的引用计数器默认为1,当引用计数器为0时,表示OC对象销毁,此时我们就可以对该OC对象进行回收。
而引用计数器是否为0,是判断该OC对象是否可以回收的唯一依据。
另外,每个OC对象内部都有4个字节的引用计数器的存储空间。

评分

参与人数 1技术分 +2 收起 理由
Micro + 2 很给力!

查看全部评分

回复 使用道具 举报
使用完即释放,不占用多余内存空间
回复 使用道具 举报
让不用的内存及时加收,加快程序的运行,让程序更安全执行下去。
回复 使用道具 举报
简单来说,一句话,就是让最小的内存空间处理最多的事情!
回复 使用道具 举报
1.因为手机等设备内存有限所以我们要进行内存管理
2.内存管理我们主要是利用计数器来完成,这里出现了著名的僵尸对象!野指针!
3oc内存管理经过了手动自动arc的发展过程
4,谁retain,谁release
回复 使用道具 举报
还没学到内存管理,努力中TVT
回复 使用道具 举报
我要看再一遍,给我加点分撒

评分

参与人数 1黑马币 +2 收起 理由
Micro + 2 淡定

查看全部评分

回复 使用道具 举报
合理利用空间
回复 使用道具 举报
优化内存,及时释放空间
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马