第六天-多个对象的内存管理[理解]

//
//  main.m
//  03-多个对象的内存管理
//
//  Created by Apple on 14/12/1.
//  Copyright (c) 2014年 itcast. All rights reserved.
//
/*
 手动内存管理黄金法则
 
 谁调用new,alloc,retain,copy,multableCopy,谁就要调用对应的release或autorelease;
 
 口诀:有加就有减
 
 当你需要一个对象的时候,那么就给他发送一条retain的消息
 当你不需要一个对象的时候,那么就给他发送一条release的消息
 */
#import <Foundation/Foundation.h>

#import "CZPerson.h"

int main(int argc, const char * argv[]) {
  
    CZPerson *person = [[CZPerson alloc] init];//p 1
    
    CZRoom *r = [[CZRoom alloc] init];//r 1
    
    [person setRoom:r];// r 2
    
    [r release]; //1
    
//    CZRoom *r2 = [[CZRoom alloc] init];
//    
//    person.room = r2;
//    
//    [r2 release];
     person.room = r;
    
    
    [person release];//p 0  r 0
    
  
    
    
    
    
    
    return 0;
}

//
//  CZPerson.h
//  1201-内存管理
//
//  Created by Apple on 14/12/1.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZRoom.h"
/*
  手动内存管理黄金法则
 
  谁调用new,alloc,retain,copy,multableCopy,谁就要调用对应的release或autorelease;
 
  口诀:有加就有减
 
  当你需要一个对象的时候,那么就给他发送一条retain的消息
  当你不需要一个对象的时候,那么就给他发送一条release的消息
*/


@interface CZPerson : NSObject
{
    CZRoom *_room;
}

//setter声明
- (void) setRoom:(CZRoom *) room;



@end


//
//  CZPerson.m
//  1201-内存管理
//
//  Created by Apple on 14/12/1.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"

@implementation CZPerson

/**
1、当你需要一个对象时候,要对这个对象进行一次retain
2、当你不在需要一个对象的时候,那么就对象这个对象进行一次release
3、当你接受一个新的对象的时候,需要release旧对象,retain新对象
4、如果新对象与旧对象是一个对象,就不要内存管理的代码了
 
 */

- (void) setRoom:(CZRoom *) room
{
//  成员对象一创建的时候就被初始化为nil
//  此处要加一个判断
//  如果他们两不相同,才需要内存管理的代码
    if(_room != room){
        [_room release];
        //    [room retain];
        //    _room =room;
        _room =  [room retain];
    }
//    [_room release];
//    //    [room retain];
//    //    _room =room;
//    _room =  [room retain];
}


-(void) dealloc
{
//  释放你所占用的资源
    
//    [_room release];
//    _room =nil;
    
    self.room = nil;
    
    NSLog(@"CZPerson dealloc");
    [super dealloc];
}

@end


//
//  CZRoom.h
//  1201-内存管理
//
//  Created by Apple on 14/12/1.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface CZRoom : NSObject

@end

//
//  CZRoom.m
//  1201-内存管理
//
//  Created by Apple on 14/12/1.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZRoom.h"

@implementation CZRoom


-(void) dealloc
{
    
    NSLog(@"CZRoom dealloc");
    [super dealloc];
}
@end


你可能感兴趣的:(第六天-多个对象的内存管理[理解])