第05天OC语言(05):多对象内存管理

  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

能清楚知道多个对象是怎么管理内存的

学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

什么是对象,对象怎么管理内存


一、本章笔记
 // 一、当A对象 想使用 B对象 一定要对B对象 进行一次retain,
 这样才能保证A对象存在B对象就存在,
 也就是说这样才能保证无论在什么时候 在A对象中 都可以使用B对象
 
  二、当A 对象释放的时候,一定要对B对应进行一次 release操作,这样才能保证 A对象释放了,B对应也会随之释放,避免内存泄漏
  总之一句话,有增就有减

二、code
main.m
#pragma mark 05-多对象内存管理
#pragma mark - 代码
#import 
#pragma mark 类

#import "Person.h"

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        // 1.创建两个对象
        
        Person *p = [[Person alloc]init];
        Room *r = [[Room alloc]init];
        r.no = 333;
        
        // 将房间赋值给人
        // 人需要使用这房间, 只要人在 房间就一定要在
        p.room = r; // [p setRoom:r];
        [r release];
        
        // 在这行代码之前,人都没有释放
        NSLog(@"-----");
        
        //  人都不在了, 房间也必须销毁
        [p release];
    }
    
    return 0;
}

Person
>>>.h
#import 
#import "Room.h"
@interface Person : NSObject
{
    Room *_room;
}
- (void)setRoom:(Room *)room;
- (Room *)room;

@end

>>>.m
#import "Person.h"

@implementation Person
- (void)setRoom:(Room *)room
{
    // 对房间的引用计数器 + 1
    [room retain];
    _room = room;
}
- (Room *)room
{
    return _room;
}

- (void)dealloc
{
    // 人释放了,房间也需要释放
    [_room release];
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

Room
>>>.h
#import 

@interface Room : NSObject

@property int no;

@end

>>>.m
#import "Room.h"

@implementation Room

-(void)dealloc
{
    NSLog(@"%s no = %i",__func__,_no);
    [super dealloc];
}

@end

你可能感兴趣的:(第05天OC语言(05):多对象内存管理)