黑马程序员————OC内存管理_笔记整理(一)

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、基本原理

1.什么是内存管理

1)每个app所占内存是有限制的,需要回收一些不再需要使用的内存空间
2)管理范围:任何继承了NSObject的对象

2.对象的基本结构

1)每个OC对象都有自己的引用计数器
2)每个对象内部专门有4个字节的存储空间来存储引用计数器

3.引用计数器的作用

1)当使用alloc、new、copy创建新对象时,新对象的引用计数器默认就是1
2)当引用计数器数值为0是时,对象占用的内存就会被系统回收,如果对象
的技术器数值不为0,那么在整个程序运行过程中,它占用的内存就不可能被回收

4.引用计数器的操作
/*
retain : 计数器+1
release:计数器-1
retaincount:获取当前计数器
dealloc: 当一个对象被回收的时候就会调用
 */


1)给对象发送一条retain消息,可以使引用计数器值+1
2)给对象发送一条release消息,可以使引用技术器值-1
3)可以给对象发送retaincount消息获得当前的引用计数器值

5.对象的销毁

1)当一个引用计数器的值为0时,那么它将被销毁,所占用得内存会被系统回收
2)当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
3)一般重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言
4)一旦重写了dealloc方法,一定要调用[super dealloc]方法,并且放在最后面调用
5)不要直接调用dealloc方法
// 当一个Person对象被回收的时候,就会自动调用这个方法
-(void)dealloc
{
    NSLog(@"Person对象被回收");
    
    // 一定要调用,并且放在最后面
    [super dealloc];
}

二、Xcode的设置

1.取消ARC

点击工程———>build setting———>all———>搜索框输入auto——找到ARC并关闭


2.开启僵尸对象监控



三、内存管理的原则

1)你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
2)你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release操作)
3)谁创建,谁release
如果你通过alloc、new、(Mutable)copy来创建对象,那么你必须调用release或者autorelease
4)谁alloc,谁release
只要你调用了retain,无论这个对象如何生成的,你都要调用release

四、Set方法的内存管理

1.基本数据类型:直接赋值
_age = age;

2.oc对象类型

- (void)setCar:(Car *)car
{
    if(car != _car)
    {
    // 对当前使用的车(旧车)做一次release
    [_car release];
    
    // 对新车做一次retain操作
    _car = [car retain];
    }
}

3.dealloc的代码规范
1)一定要调用[super dealloc],而且放到最后面
2)对当前(self)对象所拥有的其它对象做一次release
-(void)dealloc
{
    [_car release];
    
    [super dealloc];
}

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值