OC的内存管理

本文介绍Objective-C中的内存管理原理,包括引用计数、对象的存储方式及dealloc方法的使用。了解如何通过retain和release操作来控制对象的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、内存管理的范围:
在oc中我们只对继承了NSObject对象的对象进行内存管理。对于非对象类型无效。例如:(int,char,float,double,enum,struct)等数据类型我们不需要对其进行内存管理。

2、变量的存储方式:
非oc对象类型的变量一般会放在栈里面(栈内存会被系统自动回收)

oc对象存放到堆内存里面(这个要程序员自己进行释放)





3、引用计数:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁的,引用计数表示这个对象当前有多少个对象正在对其进行引用,每个OC对象的内部都有一个4个字节的存储空间来存放引用计数器。

4、引用计数器的作用:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁,当一个对象的引用计数为0时,表示当前没有任何变量对其进行引用,此时系统会调用dealloc方法对其进行销毁。
任何一个对象,刚被创建的时候,默认引用计数为1
即:当我们使用alloc、new、copy来创建一个对象时,对象的引用计数默认为1

5、引用计数器的操作:
当我们给对象发送一条retain消息,可以使对象的引用计数 + 1
当我们给对象发送一条release消息时,可以使对象的引用计数 -1
当我们给对象发送一条retainCount消息时,可以查看对象当前的引用计数值。

注意:当我们向对象发送release消息时,并不是代表对象被销毁或回收,仅仅是让对象的引用计数-1,如果此时刚好对象的引用数变成0,则对象才会被销毁。

6、dealloc方法:
当一个对象的引用计数为0时,系统会自动调用这个方法,对对象的内存进行释放,注意:这个方法我们不能主动调用。 
我们一般会在自己的类中,重写dealloc方法,来释放相关资源,注意:当我们重写dealloc方法时,一定要调用[super dealloc]方法,并且放在整个方法的总后面。
例: 
- (void)dealloc
{
     ……….
     ………..
     ……….
     [super dealloc];//此句代码一定要放在最后面调用。
}

注意:
1、不能主动去调用dealloc方法
2、一旦对象被回收了,它占用的内存就不再可用,如果坚持使用则会导致野指针错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值