黑马程序员——OC内存管理(一)

黑马程序员——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。

经典示例:

{代码:人换车程序}

@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];
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值