------
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培训、期待与您交流! -------