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

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内存管理的,转载一下与你共享概述我们知道在程序运行过程中要创建大量的对象,和其他高级...
    niceSYT阅读 460评论 0 2
  • 学习目标 1.【理解】对象在内存中的存储 2.【理解】nil和NULL 3.【了解】#pragma mark分组导...
    Hm丶阅读 485评论 0 3
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,289评论 3 25
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,085评论 3 38
  • 导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...
    千山小畻阅读 2,100评论 0 7