黑马程序员——OC内存管理(一)
2014-11-22 09:47
232 查看
黑马程序员——OC基础---基础语法(一)
------- android培训、ios培训、期待与您交流! ----------
内容概括:
一、内存管理
1、每个对象内部都有4个字节空间来存放他自己的引用计数器,计算有多少人使用他,数据为0时,对象被销毁。
2、引用计数器操作。
1.给对象发送一条retain消息,使计数器值加一,返回对象本身。
2.给对象发送一条release消息,使计数器值减一,没有返回值。
3.给对象发送一条retaincount消息,获得当前计数器值。
3、对象的销毁。
1.当一个计数器值为0时,它将被销毁,系统会自动向对象发送一条 dealloc消息。
2.一般会重写dealloc方法,在这里释放相关资源,dealloc方法就像对象的遗言。
3.一旦重写了dealloc方法,就必须调用[supper dealloc],并且放在最后面调用。
4、注意点
1.一个alloc方法对应一个release方法。
2.一个retain方法也对应一个release方法。
名词概念:
僵尸对象:所占内存已经被回收的对象,僵尸对象不能再使用。
野指针:指向将是对象的指针,给野指针发消息会报错。
空指针:没有指向任何东西的指针,存储的内容是(nil、NULL、0)给空指针发消息不报错。
内存管理的原则:
1.你想使用(占用)某个对象时,就应该让对象的计数器加一。
2.你不想再使用(占用)某个对象时,就应该让对象的计数器减一。
3.谁retain,谁release。
4.谁alloc谁release。
经典示例:
{代码:人换车程序}
总结与心得:遇到不用的对象,立刻释放内存以提升性能。
内存管理代码规范:
1、只要调用了alloc,就一定有release(autorelease),对象不是alloc产生的不用release。
2、set方法代码规范
1> 基本数据类型,直接复制。
2> OC对象类型
3、dealloc方法代码规范
1> 一定要有[supper dealloc],而且放到最后面。
2> 对self(当前对象)所拥有的其他对象做一次release。
------- android培训、ios培训、期待与您交流! ----------
内容概括:
一、内存管理
1、每个对象内部都有4个字节空间来存放他自己的引用计数器,计算有多少人使用他,数据为0时,对象被销毁。
2、引用计数器操作。
1.给对象发送一条retain消息,使计数器值加一,返回对象本身。
2.给对象发送一条release消息,使计数器值减一,没有返回值。
3.给对象发送一条retaincount消息,获得当前计数器值。
3、对象的销毁。
1.当一个计数器值为0时,它将被销毁,系统会自动向对象发送一条 dealloc消息。
2.一般会重写dealloc方法,在这里释放相关资源,dealloc方法就像对象的遗言。
3.一旦重写了dealloc方法,就必须调用[supper dealloc],并且放在最后面调用。
4、注意点
1.一个alloc方法对应一个release方法。
2.一个retain方法也对应一个release方法。
名词概念:
僵尸对象:所占内存已经被回收的对象,僵尸对象不能再使用。
野指针:指向将是对象的指针,给野指针发消息会报错。
空指针:没有指向任何东西的指针,存储的内容是(nil、NULL、0)给空指针发消息不报错。
内存管理的原则:
1.你想使用(占用)某个对象时,就应该让对象的计数器加一。
2.你不想再使用(占用)某个对象时,就应该让对象的计数器减一。
3.谁retain,谁release。
4.谁alloc谁release。
经典示例:
{代码:人换车程序}
@implementation Person - (void)setCar:(Car *)car { if (car != _car) { // 对当前正在使用的车(旧车)做一次release [_car release]; // 对新车做一次retain操作 _car = [car retain]; } } - (Car *)car { return _car; } - (void)setAge:(int)age { // 基本数据类型不需要管理内存 _age = age; } - (void)dealloc { // 当人不在了,代表不用车了,对车做一次release操作 [_car release]; NSLog(@"%d岁的Person对象被回收了", _age); [super dealloc]; // 调用父类方法。 } @end
总结与心得:遇到不用的对象,立刻释放内存以提升性能。
内存管理代码规范:
1、只要调用了alloc,就一定有release(autorelease),对象不是alloc产生的不用release。
2、set方法代码规范
1> 基本数据类型,直接复制。
- (void)setAge:(int)age { -age = age; }
2> OC对象类型
- (void)setCar:(Car *)car { if(car != _car) { //对就对象做一次release。 [_car release]; _car = [car retain]; } }
3、dealloc方法代码规范
1> 一定要有[supper dealloc],而且放到最后面。
2> 对self(当前对象)所拥有的其他对象做一次release。
- (void)dealooc { [_car release]; [supper dealloc]; }
相关文章推荐
- 黑马程序员——OC内存管理
- 黑马程序员-OC内存管理
- 黑马程序员——OC内存管理
- 18、黑马程序员-OC内存管理
- 黑马程序员-----OC内存管理(一)
- ios黑马程序员--oc内存管理
- 黑马程序员-----OC内存管理(二)
- 黑马程序员——IOS基础——OC内存管理ARC
- 黑马程序员--ios基础--oc内存管理
- 黑马程序员-----------ios培训 oc内存管理(一)
- 黑马程序员——OC内存管理
- 黑马程序员-----OC内存管理(三)
- 黑马程序员——OC学习小结------OC内存管理
- 黑马程序员-OC内存管理
- 黑马程序员_OC内存管理
- 黑马程序员_OC内存管理
- 黑马程序员----第六篇 OC内存管理(一)
- 黑马程序员----第七篇 OC内存管理(二)
- 黑马程序员-OC内存管理
- 黑马程序员——OC内存管理(非ARC,手工管理)