A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马中的小绵羊 中级黑马   /  2015-8-22 21:38  /  592 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一,内存管理概念:
    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];

    }
}


2 个回复

倒序浏览
内存这里并不是十分的好学
回复 使用道具 举报
过来学习一下,很赞
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马