OC语言day06-05ARC中对多个对象内存管理

pragma mark ARC中对多个对象内存管理

pragma mark 概念

/**
 
 ARC下的@property参数
 strong 用于OC对象 相当于 MRC中的 retain
 weak   用于OC对象 相当于 MRC中的 assgin
 assgin 用于基本数据类型, 跟MRC的assgin一样
 
 */

pragma mark 代码

#import 
#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 

@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 

@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

你可能感兴趣的:(OC语言day06-05ARC中对多个对象内存管理)