OC内存管理学习感悟


关于内存管理部分;首先讲了我们我们为什么要管理内存,内存管理器的原理,实现方法;再进一步讲了从单个对象的内存管理到多个对象的内存管理;在面对多个对象时,为了解决我们怎样更方便简洁的问题,从而引出了set实现对象时的内存管理;再到我们用Xcode建立模板时出现的原来不认识的那些代码,的从新认识。(该部分今天还有后面10视频没有看完)。

下面我就今天的学习内容做个简单的介绍(可能有不详尽或者理解偏差之处,望高人指出)。关于内存管理的引出,很显然就是提高内存的利用率,是程序占用更少的内存,使我们的设备运行更加流畅。在OC中对内存的管理提出了一个“引用计数器”的东西来控制程序里的对象的存在或者消失。而对“引用计数器”,早OC中引入了retain和release两个实现方法来控制“引用计数器”,每当调用一次对象,用retain就可以计数加一次,每调用一次release,“引用计数器”就减一次。即,达到这样一个效果:再有方法使用对象时,计数器就记一次,没有方法使用对象时,计数器得是零,最后达到对象从内存中消失。其中,有几个概念:野指针,即指向僵死对象的指针;retain会返回对象本身的。在dealloc方法中,需要一个[self release],最后一定要用[super dealloc],释放NSObject里面的ias对象。最后做到,谁retain,谁release;谁alloc,谁release。

但是在面对更对对象时,我们就必须采用更高效的内存管理方法,这就出现了set的内存协助管理方法,即,在对象的方法实现的set中做一些内存管理的事。即在方法实现中加入这样一个语句:if (age != _age){[_age  release] ;   _age = [stu  retain]},这样if语句是为防止重复写入对象,[_age  release]是对现有对象的一个计数器得减一, _age = [stu  retain],是加入新对象,并且让计数器对新对象计数一次。

由于,我们的set方法实现时有@property NSString* name = name,这样的自动实现方式,一次对property进行了一个参数的添加,使之具有更大的功能。比如,对内存的管理:OC对象的需要用retain,对基本数据对象的用assign(默认的);对setter和getter生成时,readwrite,即都生成(默认的),readonly则只生成getter;对多线路管理,有atomic(默认的)和nonatomic(由于其性能高,所以都要写上);修改方法名称时可以用getter和setter,一般用于BOOL类方法;例子:@property (nonatomic,assign) NSString *p.这样,我们的内存管理的语句就得到大大的简化,能把大量的时间精力放在方法和性能的改善上了。

之后,提到一个不叫特殊的情况,即,要引用"....h"时,需要用@class  来声明。当遇到互相引用时,我们需要在把他们的@property里面一个用retain,一个用assign,这样就不会出现对象的重复。最后有一个我们在生成一个项目时,有一个@autoreleasepool的东西,他实质上就是一个对象水池,他里面所有对象都会被房子啊里面,让后就一起销毁。虽然有个他就不用担心[p release]的位置了,但是他不利于对象的及时销毁,并且不能精确控制对象的销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值