黑马程序员技术交流社区
标题:
IOS第6期第三次技术活动(送黑马币)
[打印本页]
作者:
张文文
时间:
2015-1-26 20:09
标题:
IOS第6期第三次技术活动(送黑马币)
现在版主给分都是扣自己的分,我的分也所剩不多了,有送不到的同学不要生气。 至于25分才分配入学名额这个要求,只是为了让大学在论坛活跃一下,体验学习之外一起交流的互动。其实,拿技术分没有什么捷径,只有自己每天在论坛发帖,回复获得黑马币再换取技术分。想进入黑马培训,我相信也不是十天八天就可以走完那些流程的(基础很棒的可以忽略这句)。所以,也不要想一口吃个胖子,循序渐进慢慢来,对自己也是有好处的。
题目:谈一下对OC内存管理的理解(ARC、非ARC都可以)
作者:
frozen
时间:
2015-1-26 20:17
移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等 管理范围:任何继承了NSObject的对象,对其他基本数据类型(int、char、float、double、struct、enum等)无效
作者:
cowozo
时间:
2015-1-26 21:10
苹果的内存有限,为了更好的用户体验,需要手动管理内存,内存对程序员是个很敏感的话题。还没接触到,只是大概的了解。才看到C语言
作者:
业严
时间:
2015-1-26 21:25
关于ARC:
1.ARC是自iOS5之后增加的新特性,完全消除了手动管理内存的繁琐。编译器自动在适当的地方插入适当的retain、autorelease语句,ARC是编译器特性,因此ARC和手动管理内存性能是一样的,。由于编译器还可以执行某些优化,所有有时还能更加快速。
2.ARC的判断规则:只要没有强指针指向对象,就会释放对象。
3.强指针:默认情况下,所有的指针都是强指针,__strong;弱指针:弱指针指向的对象被释放时,弱指针会自动变成nil指针,__weak。
4.使用注意:不能调用retain、(auto)release、retainCount;可以重写dealloc,但不能调用[super dealloc]。
作者:
andyJerry
时间:
2015-1-26 21:42
对象中有一个引用计数器,当对象被引用时这个值就加一,release则减一,你初始化一个对象的时候这个对象的引用计数就为1。当对象的引用计数为0的时候系统就知道这个对象每人使用了,就销毁它释放资源。就跟你去图书馆借书一样,借了是要还的。这是我的理解。。。
作者:
gzf201314
时间:
2015-1-26 22:24
每个类在创造实例时都会在内存中给它划分一片区域用来存放对象,然后实例名指向该内存空间,如果这个对象不用了,这块区域就会被系统回收,抹掉内容或者覆盖上别的内容,objective c中没有java中那么强大的垃圾回收机制,网上有人称其为半自动模式,相当形象。我们通过“引用计数(reference couting)”来判断这个内存空间是否仍在使用呢,.当该对象创建时,该计数为1,说明有一个引用,如果不用时,就会减为0,这就表示不再使用了,那么就会销毁该空间。
后台不占用cpu但是占用运存,程序开多了会自动关闭一些程序腾出运存.------俗话说
如果对一个对象使用了alloc、[mutable]copy、retain,那么你必须使用相应的release或者autorelease.------黄金法则
作者:
行我福
时间:
2015-1-27 09:53
OC的内存管理,有一条黄金法则:谁创建谁释放,谁retain谁释放。
在OC中,当对一个对象拥有控制权后,都需要进行释放,但是如何拥有对象的控制权呢?对对象进行了alloc、retain、copy操作后,我们拥有了对象的控制权,因此需要对其进行释
OC采用了引用计数(retain count)的方法。对象的内部保存一个数字,表示被引用的次数,使用alloc或者copy(或者new)方法创建一个对象时,其计数器的值为1
作者:
松果
时间:
2015-1-27 12:22
arc并不是垃圾回收,而是在程序编译时,编译器添加省略的内存回收代码
作者:
alin000
时间:
2015-1-27 16:56
新建一个OC对象会在堆中申请一个空间,用一个指针变量指向该存储空间,并且对象内部会有一个引用计数器来指示该对象当前有多少个引用。如果对象之间的引用关系非常复杂,就很容易出现类似野指针、僵尸对象、空指针的问题,导致最后堆中的这一块空间没有释放,造成内存的浪费。有些程序编译链接都没有问题,但是运行的时候会闪退,很有可能就是因为内存管理不当引起的。内存管理的作用是防止程序的这种运行时错误。
作者:
刘聪聪
时间:
2015-1-30 03:26
OC使用了(Retain Count)的机制来管理内存中的对象。
在OC中每个对象都对应着自己(Retain Count),持有计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息时,持有计数数值会增加。
相反,当你像一个对象发送release消息时,持有计数数值会减小。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。
作者:
JUNE_EN
时间:
2015-1-30 11:10
1,ARC 是编译器特性,并不是类似与java 的垃圾回收机制
2,ARC的判断规则:只要没有强指针指向对象,就会释放对象。
3, ARC完全消除了手动管理内存的繁琐。编译器会根据计数器来自动进行替换
2.ARC的判断规则:只要没有强指针指向对象,就会释放对象。
3.强指针:默认情况下,所有的指针都是强指针,__strong;
当用property自动生成set get 方法的时候 要加strong如果是循环引用的话就一边strong 一般weak
4 如果不用ARC的话则对于OC对象完全需要手动去管理内存,如果类的属性是方法的话则需要在set方法操作计数器 同时重写delloc 而最终对象进行了alloc、retain、copy操作是需要进行计数器的操作
作者:
lumingfu
时间:
2015-1-30 13:32
系统资源都是有限的,会为每个程序分配一定的内存,超过内存系统将会终止你的应用程序,对你自己拥有的对象负责,你只能释放你拥有的对象,凡是通过retain,alloc,copy等手段获得了所有权的对象,都必须在你不在使用他的时候,由你来调用release,autorelease等手段来释放对他的所有权
作者:
562632346
时间:
2015-1-30 13:38
1.OC的内存管理:谁创建谁释放,谁retain谁释放。
2.OC采用了引用计数(retain count)的方法。对象的内部保存一个数字,表示被引用的次数,使用alloc或者copy(或者new)方法创建一个对象时,其计数器的值为1
作者:
晓风_残月
时间:
2015-1-30 16:01
根本原因:对象和其他数据类型在内存的存储方式不一样,其他数据类型才在栈中,队形存放在堆中。当这块代码块结束时所有的局部变量也被内存回收,包括指针,而对象没有指针的指向,却依然存放在内存中,就造成了内存泄露。
所以管理对象应该依据 谁创建(new、alloc 、init、copy等)谁release、谁retain谁release的原则。
ARC机制:不允许调用release,retain,retainCount等 而是自动管理内存。
好处是使开发人员专心去实现业务逻辑而不是冗杂的内存管理。
作者:
萝莉最有爱
时间:
2015-1-30 20:03
ARC的出现,让我们可以不用再进行繁琐的内存管理,通过自动的方式,来避免因为书写遗漏等原因造成的内存回收不够彻底及时等问题。因此保证业务员可以将精力都放在业务上。是对业务人员的一种解放,有利于以后开发的软件的高质量。
作者:
1026238004
时间:
2015-1-31 22:59
我刚刚学到内存管理:lol
作者:
Micro
时间:
2015-2-8 12:04
版主,我分不够,现在参加活动行吗?
以下是我的理解
凡是nsstring,就用copy,定义一个模型对象,就用strong,只是赋值的,例如int、double、char 以及CGRect类似的就用assign。
非ARC 在.h文件中,@property 声明属性时,oc对象用retain,非oc对象用assign。
在ARC机制下, .h文件中,@property 声明属性时,OC对象用strong. 两个类之间相互引用时,一端用strong,一端用week.
作者:
为了梦想
时间:
2015-2-8 18:33
ARC对于刚学习oc的人来说是一个福利,你可以不需要有多少内存管理的知识,有系统替你管理内存。
但对于老手来说,ARC反而帮助不大,手动管理内存的优势是目前ARC技术所无法做到的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2