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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Micro   /  2015-3-9 15:19  /  4893 人查看  /  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 很给力!

查看全部评分

回复 使用道具 举报
使用完即释放,不占用多余内存空间

点评

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

评分

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

查看全部评分

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