黑马程序员技术交流社区
标题: 内存管理 [打印本页]
作者: 黑马中的小绵羊 时间: 2015-8-22 21:38
标题: 内存管理
一,内存管理概念:
1,内存管理的区域:
内存管理主要是对内存中的堆区进行管理;
2,内存管理的内容:
内存管理只针对继承NSObject的对象进行内存管理,也就是说基本数据类型是不需要内存管理的;
3,一个APP所占用的内存超过20M时,系统就会向该程序发出,内存警告.
4,内存管理的原理:
(1),通过对象的引用计数器(retainCount)管理,当调用对象的retain,new,alloc,copy方法时,引用计数加1;当调用对象的release,autorelease方法时,引用计数减1;
(2),当对象的引用计数器为0的时候,对象会被回收;
5,内存管理的分类:
(1),MRC,手动管理;
(2),ARC,自动管理;
6,当我们的对象被系统回收的时候,会调用NSObject的dealloc方法,我们可以理解为对象的"临终遗言";
7,重写dealloc方法时:
(1),先释放子类自己的对象的空间;
(2),再释放父类的;
- (void)dealloc
{
//1 先释放子类自己的对象的空间
NSLog(@"Person已经挂了");
//2 再释放父类的
[super dealloc];
}
二,内存管理原则:
1,谁创建(alloc,new),谁release或者autorelease;
2,谁retain,copy,mutableCopy,谁release或autorelease;
三,在对象内存管理中,我们研究的内容:
1,野指针;
1)定义的指针变量没有初始化;
2)指向的空间已经被释放了;
2,内存泄露;
如果栈区的指针已经释放了,而堆区的空间还没有释放,堆区的空间就被泄露了;
四,nil和Nil及NULL的区别:(面试题)
nil 是一个对象值;如果我们要把一个对象设置为空的时候就用nil;
Nil 是一个类对象的值,如果我们要把一个Class类型的对象设置为空的时候就用Nil ;
NULL 是一个通用指针;
NSNull 是一个对象,它用在不能使用nil的场合;
/*******************************下午******************************/
一,
1,如何避免野指针?
对象释放完了之后,将指针赋值为nil;
Dog *d = [[Dog alloc] init];
[d release];
d = nil;
2,如何造成内存泄露?
一般情况下,都是没有遵守"内存管理的原则";
二,set方法的内存管理:
1)基本数据类型或者非对象类型:直接赋值
int float double long struct enum
-(void)setAge:(int)age
{
_age=age;
}
2)OC对象类型,需要做如下判断;
-(void)setCar:(Car *)car
{
//1.先判断是不是新传进来的对象
if(_car!=car){
//2 对旧对象做一次release
[_car release];//若没有旧对象,则没有影响
//3.对新对象做一次retain
_car=[car retain];
}
}
作者: 15132876050 时间: 2015-8-22 21:51
内存这里并不是十分的好学
作者: MEIMEIAA 时间: 2015-8-22 21:53
过来学习一下,很赞
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |