5.25 类的引用与传值

1,类的引用
2,交叉引用与循环引用
3,传值的方式
4,数据持久化
5,NSUserDefaults的使用
6,单例

//  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
//  Observer.m

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

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

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

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


//关联式引用

#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);
}
//  ClassRoom.h

#import <Foundation/Foundation.h>

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

@end
//  ClassRoom.m

#import "ClassRoom.h"

@implementation ClassRoom
- (instancetype)init
{
    self = [super init];
    if (self) {
        _persons = [NSMutableArray array];
    }
    return self;
}
@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
//  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
//  Computer.h

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

@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
//  main.m

#import <Foundation/Foundation.h>
#import "Observer.h"
#import "Person.h"
#import "Computer.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
/*
        Person *per = [[Person alloc]init];
//        Computer *computer1 = [[Computer alloc]init];
//        per.computer = [computer1 autorelease];
//        [per release];

        per.name = [NSString stringWithFormat:@"abc"];//retaincount = 2
        per.name = [NSString stringWithFormat:@"bcd"];//2
        per.name = nil;//没有

        //对象的内存什么时候释放?
        */
        Observer *ob = [[Observer alloc]init];


        NSArray *array = @[@"keyword"];

        [array writeToFile:@"/Users/wangzheng/Desktop/classSeven.txt" atomically:YES];

        NSArray *array1 = [NSArray arrayWithContentsOfFile:@"/Users/wangzheng/Desktop/classSeven.txt"];
        NSLog(@"%@",array1);
        //NSUserDefaults
        [[NSUserDefaults standardUserDefaults]setObject:@"12345" forKey:@"account"];//将数据存入本地路径(移动设备路径)
        BOOL succeed = [[NSUserDefaults standardUserDefaults]synchronize];

   //获取到Document和Library
        NSString *account = [[NSUserDefaults standardUserDefaults]objectForKey:@"account"];

        NSLog(@"%@",account);
  //数据持久化
        //对象归档  NSKeyedArchiver NSKeyedUnarchiver
       //网络请求  服务器
       // 云  icloud

        NSLog(@"Hello, World!");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值