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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 Micro 于 2015-3-9 23:52 编辑

     题目如下:
     请用自己的话来谈谈你对oc内存管理的理解。    

   根据答题情况给予奖励。奖励包括技术分与黑马币。小伙伴们噪起来!!!{:3_57:}
   活动要求:不得百度,不得复制粘贴。


63 个回复

正序浏览
在xcode 5 之前内存管理确实是很变态的。因为内存有限,手机内存更有限,所以开发中将用不到的内存释放掉。开始之前需要人为管理,alloc copy retain new  用来创建内存,release 用来释放,但是这要太消耗精力了 ,所以就出现了 autorelease ,虽然比之前容易管理,但是autorelease 延迟释放还是会多消耗很多的内存资源,实在无语(java .net 垃圾回收太爽了)。xcode 5 后arc的出现就完全代替了我们管理内存,这样内存就必须要人为管理。垃圾回收????NO  ,其实是编译器会再适当的地方自动插入retain,release和autorelease消息。。。
回复 使用道具 举报
我觉得是   堆里的对象进行管理,以前xcode是要程序员自己管理内存,一个 alloc 引用计数器+1  对应一个release  引用计数器-1  ,一个retain 引用计数器+1   对应一个release 引用计数器-1,当 引用计数器=0时,内存就被收回  
回复 使用道具 举报
sydie 中级黑马 2015-3-21 09:49:31
59#
这个问题似乎是问过的。内存是有限的。我们在使用之后,需要释放内存。
回复 使用道具 举报
本帖最后由 yyx1992 于 2015-3-21 00:15 编辑

其实我觉得只有一句话:有加必有减,一一对应;
详细就是:非ARC:通过retain,alloc,copy等创建对象时,引用计数器加1,那么必须有对应的release或者autorelease对计数器进行减 1操作;
宏观方面:如果方法中有对计数器进行加或减操作,那么调用方法的代码段无需对应的减或加操作。release不是销毁对象,而是对计数器减1;
autorelease自动回收池可以 创建无限个,可以嵌套,好处是不用关心对象的释放时间,不关心什么时候调用release,缺点不能精确控制,适用于占用内存较小的数据类型;
循环引用一个必须用retain,另一个则用assign
ARC:不是内存回收机制,只是自动生成了代码,减少了程序员的负担;
判断回收准则:只要没有强指针指向对象,就会释放对象
循环引用一个必须用strong,另一个则用weak
版主,给加点技术分呗,熬夜写了半天不容易啊

评分

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

查看全部评分

回复 使用道具 举报
内存管理的对象就是程序中的实例对象,方法是通过引用计数来区分程序中有用和无用的对象并及时回收无用对象以释放其占用的存储空间来保证有限的内存资源不被耗尽。

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
手机的内存有限,每个程序默认只有大约25M的内存,如果超过了,系统就会警告,甚至强制关掉程序,造成闪退。所以内存管理是很重要的。
有alloc, new .copy,就要有对应的release 或者 autorelease. 有retain ,就有对应的release, 当对象不再使用时,就要及时 的回收。

评分

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

查看全部评分

回复 使用道具 举报
qianlongwuyong 来自手机 中级黑马 2015-3-14 09:38:49
55#
努力学习中,我想内存管理应该和c语言的差不多,合理利用有限的内存,提高性能
回复 使用道具 举报
谢谢楼主的黑币了。  我今天 晚上要看到这里了。请楼主帮我留点技术分哟。
回复 使用道具 举报
重要,但不是很重要吧
回复 使用道具 举报
还没看到内存呢
回复 使用道具 举报
请问再答题还有奖励没

点评

有的  发表于 2015-3-12 20:18
回复 使用道具 举报
OC的内存管理个人觉得需要了解:首先,内存管理就是管理对象,本质是类似C语言对计数器数值的操作,不同于Java的垃圾回收;其次,谁alloc谁release,谁retain谁release;最后注意循环使用问题
回复 使用道具 举报
之所有要有内存管理是因系统的内存有限,利用良好的管理机制可以有效的利用内存。
    内存管理就是说你要对自己的对象负责,在利用完自己的对象之后,要及时的清除不用的内存,而且只能释放自己的对象。释放可以通过调用release、autorelease来实现。

评分

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

查看全部评分

回复 使用道具 举报
1、Objective-C类中实现了引用计数器,对象知道自己当前被引用的次数
2、最初对象的计数器为1
3、如果需要引用对象,可以给对象发送一个retain消息,这样对象的计数器就加1
4、当不需要引用对象了,可以给对象发送release消息,这样对象计数器就减1
5、当计数器减到0,自动调用对象的dealloc函数,对象就会释放内存
6、计数器为0的对象不能再使用release和其他方法

评分

参与人数 1技术分 +2 收起 理由
Micro + 2 很全面

查看全部评分

回复 使用道具 举报
sydie 中级黑马 2015-3-12 06:21:14
47#
内存有限制,需要加强或者释放。
回复 使用道具 举报
七期 的什么时候招生结束啊?有人知道吗?
回复 使用道具 举报
@Micro,这个应该能加分吧?为了25我也是拼了http://bbs.itheima.com/forum.php ... p;page=1#pid1247478
回复 使用道具 举报
移动设备的内存极其有限,每个app所能占用的内存是有限制的,如果 不加强内存管理,设备就是崩溃。
当对象销毁后,不要使用野指针,会导致系统崩溃。

评分

参与人数 1黑马币 +2 收起 理由
Micro + 2 赞一个!

查看全部评分

回复 使用道具 举报
进行内存管理是因为内存属于比较重要的资源,需要充分的利用,C语言、java语言中都有关于内存管理方面的设计。而oc内存管理由retain&release 到autoreleasepool减轻了管理内存的步骤,最后有了ARC,对于内存 可以放心了,不过,我们还是需要明白内存管理的原理,这非常重要

评分

参与人数 1黑马币 +3 收起 理由
Micro + 3 赞一个!

查看全部评分

回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马