OC中内存管理机制的原理:对象的及时释放
引用计数器:
1、概念:
每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”。每个OC对象内部专门有4个字节的存储空间来存储引用计数器。
2、作用:
1)当使用alloc、new、copy创建一个新对象时,新对象的引用计数器默认就是1
2)当一个对象的引用计数器为0时,对象占用的内存就会被系统回收
3、操作:
1)调用一个对象的retain方法,引用计数器+1
2)调用一个对象的release方法,引用计数器-1
3)可以调用对象的retainCount方法,获得当前的计数器值
4、对象的销毁:
1)当一个对象的引用计数器值为0时,它将被销毁,占用的内存被系统回收
2)当一个对象被销毁时,系统会自动向对象发送一条dealloc消息(即:计数器为0时,自动调用dealloc方法)
3)一般会重写dealloc方法,在这里释放相关资源
4)一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用
注:每个对象都会调用dealloc方法
- (void)dealloc
{
NSLog(@"...");
//放最后!
[super dealloc];
}
内存管理代码规范:
1、只要调用alloc方法,必须调用release方法释放内存
只要调用retain方法,必须要调用release方法释放内存
2、想要使用(占用)某个对象,应该让对象的计数器+1(让对象做一次retain操作)
不再使用(占用)某个对象,应该让对象的计数器-1(让对象做一次release操作)
谁retain,谁release
谁alloc, 谁release
3、set方法的代码规范
1)基本数据类型:直接赋值
- (void)setAge:(int)age
{
_age = age;
}
2)OC对象类型:
- (void)setBook:(Book *)book
{
//1.先判断是不是新传进来的对象
if(book != _book)
{
//2.对旧对象做一次release
[_book release];
//3.对新对象做一次retain
_book = [book retain];
}
}
或:@property (retain) Book *book;
4、dealloc方法的代码规范
1)一定要[super dealloc],而且放到最后
2)对self(当前)所拥有的其他对象做一次release
- (void)delloc
{
[_book release];
[super dealloc];
}