- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
能清楚知道多个对象是怎么管理内存的
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
什么是对象,对象怎么管理内存
一、本章笔记
// 一、当A对象 想使用 B对象 一定要对B对象 进行一次retain,
这样才能保证A对象存在B对象就存在,
也就是说这样才能保证无论在什么时候 在A对象中 都可以使用B对象
二、当A 对象释放的时候,一定要对B对应进行一次 release操作,这样才能保证 A对象释放了,B对应也会随之释放,避免内存泄漏
总之一句话,有增就有减
二、code
main.m
#pragma mark 05-多对象内存管理
#pragma mark - 代码
#import <Foundation/Foundation.h>
#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 <Foundation/Foundation.h>
#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 <Foundation/Foundation.h>
@interface Room : NSObject
@property int no;
@end
>>>.m
#import "Room.h"
@implementation Room
-(void)dealloc
{
NSLog(@"%s no = %i",__func__,_no);
[super dealloc];
}
@end
网友评论