美文网首页
OC语言day06-05ARC中对多个对象内存管理

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

作者: liyuhong165 | 来源:发表于2016-06-15 23:17 被阅读44次

    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
    

    相关文章

      网友评论

          本文标题:OC语言day06-05ARC中对多个对象内存管理

          本文链接:https://www.haomeiwen.com/subject/mlhmdttx.html