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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

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


63 个回复

倒序浏览
本帖最后由 煎饼果子超人 于 2015-3-9 15:50 编辑

由于系统内存资源有限,内存管理是为了节省内存资源的使用,让程序更简练。一句话:使用完即释放,不占用多余内存空间。。。

评分

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

查看全部评分

回复 使用道具 举报
感觉楼上说的不错,这里再唠嗑一句:自己造的孽(申请的内存),要自己来还(释放),总不能不能等别人来(系统)。。。
回复 使用道具 举报
看了楼上的回答,我也是醉了,尼玛,我学了三天就了个造孽,加坑爹嘛。还不如说成欠债要还钱呢。

评分

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

查看全部评分

回复 使用道具 举报
OC的内存管理主要针对程序中已经无用的垃圾对象进行释放,防止占用空间,主要是原则总结如下:1.凡是使用alloc 、new、copy创建对象的必须调用relase或者autorelease去释放对象,二,除了alloc,new、copy创建的对象外的对象都是autorelease释放的,三谁retain,谁释放,内存管理重点注意僵尸对象、野指针的处理。不能给僵尸对象发送消息,否则就是内存访问错误。

点评

以上是个人平时学习的积累,以及实战之后的总结。  发表于 2015-3-9 16:08

评分

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

查看全部评分

回复 使用道具 举报
OC内存管理针对的是对象的分配内存到堆区占用的空间(就像C语言里面的动态内存分配,分配后是在内存堆区),若使用完后需要去释放   
但是需要注意的是对象创建的时候不能已匿名对象创建  不然在无法找到对象在内存的地址,也无法进行释放操作   总之一条原则是谁用完,谁就需要自己释放  

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 赞一个!

查看全部评分

回复 使用道具 举报
oc内存管理最开始是纯手动的retain&release 后来有了autoreleasepool减轻了手动管理内存的步骤,最后有了ARC,终于可以彻底像Java一样不用太操心内存管理的问题了~

评分

参与人数 1黑马币 +3 收起 理由
Micro + 3 神马都是浮云

查看全部评分

回复 使用道具 举报
OC内存管理针对的是对象的分配内存到堆区占用的空间(就像C语言里面的动态内存分配,分配后是在内存堆区),若使用完后需要去释放
但是需要注意的是对象创建的时候不能已匿名对象创建 不然在无法找到对象在内存的地址,也无法进行释放操作 总之一条原则是谁用完,谁就需要自己释放

评分

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

查看全部评分

回复 使用道具 举报
学习过java和c#,oc还没看到这块。根据我的理解,这几种语言在创建对象的时候会占据内存,而java特有的jvm有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。oc没有这种功能,所以需要我们自己找出垃圾对象,将其释放。

评分

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

查看全部评分

回复 使用道具 举报
OC内存管理:由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。

oc内存管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。

评分

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

查看全部评分

回复 使用道具 举报
我是0基础的,不知道OC内存管理与其它语言有什么区别。不边看了几天的0基础视频,感觉到了它的重要性。 有alloc ,就要有ralease. ,有始有终。

评分

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

查看全部评分

回复 使用道具 举报
这个还真不知道啊
回复 使用道具 举报
做男人就要拿的起(分配内存),也要放的下(释放内存),放不下就会累死(内存泄露)

评分

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

查看全部评分

回复 使用道具 举报
对你自己拥有的对象负责,你只能释放你拥有的对象
凡是通过retain,alloc,copy等手段获得了所有权的对象,都必须在你不在使用他的时候,由你来调用release,autorelease等手段来释放对他的所有权
在一定的代码段内,对同一个对象所做的 copy,alloc和retain的操作次数应当与release和 autorelease操作的次数相等
可以在类的dealloc方法中释放你所占有的实例变量
对于便利构造器和访问起来说,你没有通过上面的这些手段获得对象的所有权,因此在这些情况下你无须对获得对象进行额外的释放操作
autorelease只不过意味着“预定延迟发送一条release消息”,当前的引用计数器并没有变

评分

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

查看全部评分

回复 使用道具 举报 1 0
今天晚上刚好写了一个关于内存管理的博客,只写了一部分没有写完,CSDN正在审核中,明天发链接出来。

评分

参与人数 1黑马币 +2 收起 理由
Micro + 2 写出来再更多奖励

查看全部评分

回复 使用道具 举报 1 0
简单的来说就是:移动设备上的资源空间存放是有限制的,我们不能无限制的存放,这时就引出内存管理,通过释放回收内存中不再使用的数据,来提高内存空间的利用率。oc中局部变量存放于栈中,对象存放于堆中,一段程序结束时就会回收程序里面的局部变量来释放空间。

评分

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

查看全部评分

回复 使用道具 举报
从JAVA角度来分析,如果有不再引用指向该对象,那么又没有方法去处理和清除,简称不可到达对象。我们称为占据内存的垃圾~。Java有内置的垃圾回收机制,但是c或者C++,没有这个功能,需要手动释放内存,如果没有释放的话,容易有bug,内存溢出等等

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 waterfoxjie 于 2015-3-9 23:58 编辑

系统资源有限,会为每个程序分配一定量的内存,超过了一定的量便会收到内存警告,超过系统所分配的内存,系统将会终止你的应用程序。
OC内存管理的原则就是:对你自己拥有的对象负责,你只能释放你拥有的对象
采用的是“保留计数”机制,引用计数的主要接口

评分

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

查看全部评分

回复 使用道具 举报
只要还有人在使用某个对象,那么这个对象就不会被回收;只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;当你不想使用这个对象时,应该让对象的引用计数器-1;当一个对象的引用计数器为0时,那么它将被销毁,其占用的内存被系统回收。

评分

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

查看全部评分

回复 使用道具 举报
版主大人,我又来乞求看看能不能加分了:http://bbs.itheima.com/thread-174785-1-1.html
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马