pragma mark ARC中对多个对象内存管理
pragma mark 概念
/**
ARC下的@property参数
strong 用于OC对象 相当于 MRC中的 retain
weak 用于OC对象 相当于 MRC中的 assgin
assgin 用于基本数据类型, 跟MRC的assgin一样
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#import "Dog.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc]init];
Dog *d = [[Dog alloc]init];
p.dog = d;
d.owner = p;
d = nil;
NSLog(@"-----");
p = nil;
return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>
@class Dog;
@interface Person : NSObject
// MRC, A对象想拥有B对象, 需要 对B对象进行一次retain
// A对象不用B对象了, 需要 对B对象进行一次release
// property的时候 进行retain, dealloc的时候 进行release
// ARC, A对象想拥有B对象, 那么就需要用一个强指针 指向 B 对象
// A对象 不用 B 对象了, 什么都不需要做, 编译器会自动帮我们做
#warning 在ARC保存一个对象用strong, 相当于MRC的retain
@property (strong,nonatomic) Dog *dog;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%s",__func__);
}
@end
Dog.h //狗类
#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
//@property (nonatomic,strong)Person *owner;
//@property (nonatomic,assign)Person *owner;
// 在ARC中 如果保存对象不要用assign, 用weak
// assgin是专门用于保存基本数据类型的,如果保存对象用weak
@property (nonatomic,weak)Person *owner;
@end
Dog.m
#import "Dog.h"
@implementation Dog
- (void)dealloc
{
NSLog(@"%s",__func__);
}
@end