代码改变世界

多个对象的内存管理分析

2016-12-12 17:27  supper_Ho  阅读(231)  评论(0编辑  收藏  举报

 

 

//

//  main.m

//  03-多个对象的内存管理分析

//

//  Created by apple on 14-3-17.

//

//

 

#import <Foundation/Foundation.h>

 

//人拥有一辆汽车

#import "Person.h"

 

 

//1.野指针问题

//2.内存泄漏问题

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

        

        // 1

        Person * p = [[Person alloc] init];

        

        // 1

        Car * car = [[Car alloc] init];

    

        //2

        [p setCar:car];

        

        [p drive];

     

       

        //1

        [car release];

        

        //要保证对象p 存在的时候,调用对象p的任何方法都不会出错

        [p drive];

        

        //0

        [p release];

        

    }

    return 0;

}

 

 

 

//

//  Person.m

//  01-手动内存管理基本概念

//

//  Created by apple on 14-3-17.

//

//

 

#import "Person.h"

 

@implementation Person

 

- (void)setCar:(Car *)car

{

    //2,能够使得retainCount + 1 并且返回self

    _car  = [car retain];

 

}

- (Car *)car

{

    return _car;

}

 

- (void)drive

{

    [_car run];

}

- (void)dealloc

{

    //目的是要保证在p对象存在的时候,car对象一定存在

    //对象p被销毁的时候,

    [_car release];

    [super dealloc];

    NSLog(@"Person 被销毁了");

}

 

@end