引用与传值

//person.M
//  --------   computer属性的存在时间
//------------ person的存在时间   

#import "Person.h"
#import "Computer.h"
#import "ClassRoom.h"
@implementation Person
- (instancetype)init
{
    self = [super init];
    if (self) {
        NSLog(@"person init");

        _computer = [[Computer alloc]init];
//        _computer.keyword = self.delegate.keyword;
        _computer.delegate = self;
    }
    return self;
}

+ (instancetype)personWithComputer:(Computer *)computer
{
    Person *per = [[self alloc]init];
    per.computer = computer;
    per.computer.delegate = per;
//    per.point.x = 5;//
    
//    [per autorelease];//在方法中加入autorelease,使其内存管制无误,有且仅有一个
    return [per autorelease];
}

- (void)walkToClassRoom:(ClassRoom *)classRoom
{
    [classRoom.persons addObject:self];
}

- (void)dealloc
{
    [_computer release];
    [super dealloc];
}



@end
//person.h

#import <Foundation/Foundation.h>

@class Computer;
@class ClassRoom;

@interface Person : NSObject
//{
//    Computer *_computer;
//}
@property (strong, nonatomic) NSString      *name;
@property (strong, nonatomic) Computer      *computer;
//strong: 在使用属性的过程中,保证对象存在
//retain:
@property (strong, nonatomic) NSString      *keyword;


//建立一个便利构造,通过电脑对象初始化Person
+ (instancetype)personWithComputer:(Computer *)computer;
- (void)walkToClassRoom:(ClassRoom *)classRoom;
@end
//computer.m
#import "Computer.h"

@implementation Computer
- (instancetype)init
{
    self = [super init];
    if (self) {
        NSLog(@"computer init");
    }
    return self;
}
//循环引用
- (void)dealloc
{
    self.delegate = nil;//研究知识点:当owner是strong属性和assign属性的时候,分别有什么作用
    
    [super dealloc];
}

@end
//person.h
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Computer : NSObject
@property (assign, nonatomic)Person     *delegate;//上一级
//assign: 弱引用,不增加引用计数,保证对象即时释放
//weak:
@property (strong, nonatomic) NSString      *keyword;

@end
//----属性传值
//1.A.xx -> B.xx

//2.A.xx -> C.xx
//  C.xx -> B.xx

//----初始化/代理  方法传值

//----数据持久化(将任意数据归档之后,存放进本地文件)


//关联式引用
//observer.m
#import "Observer.h"

#import "Computer.h"
@implementation Observer

- (instancetype)init
{
    self = [super init];
    if (self) {
        NSLog(@"observer init");
        self.per = [[Person alloc]init];
        self.per.keyword = self.keyword;
//        _per.computer.keyword = _per.keyword;
        
        _classRoom = [[ClassRoom alloc]init];
        _classRoom.keyword = _per.keyword;
        [self actionBegin];
    }
    return self;
}

- (void)actionBegin
{
    [_per walkToClassRoom:_classRoom];
//    [_per walkToClassRoom:_classRoom];

    NSLog(@"persons = %@",_classRoom.persons);
}



@end
//observer.h
#import <Foundation/Foundation.h>
#import "Person.h"
#import "ClassRoom.h"
@interface Observer : NSObject
@property (strong, nonatomic) Person        *per;
@property (strong, nonatomic) ClassRoom        *classRoom;

@property (strong, nonatomic) NSString      *keyword;
@end
#import "ClassRoom.h"

@implementation ClassRoom
- (instancetype)init
{
    self = [super init];
    if (self) {
        _persons = [NSMutableArray array];
    }
    return self;
}
@end
#import <Foundation/Foundation.h>

@interface ClassRoom : NSObject
//给ClassRoom设置一个strong mutable的Array属性
@property (strong, nonatomic) NSMutableArray *persons;//先初始化后使用
@property (strong, nonatomic) NSString      *keyword;

@end

 

转载于:https://www.cnblogs.com/myOcNote/p/4531475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值