OC 引用与传值

mian.m

#import <Foundation/Foundation.h>
#import "Singleton.h"
#import "Login.h"
#import "User.h"
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Singleton *single1 = [Singleton shareInstance];
        single1.name = @"tom";

        Singleton *single2 = [Singleton shareInstance];

        NSLog(@"single2 = %@",single2.name);

//        Login *loginer1 = [[Login alloc] init];
//        loginer1.userName = @"大神";
//    
//        User *user1 = [[User alloc] init];
//        
//        [user1 userName:loginer1];
//        user1.loginer = loginer1;

        Login *loginer1 = [[Login alloc] init];

        [loginer1 loadData];

        [loginer1 saveUserName];
//
        User *user1 = [[User alloc] init];
        [user1 loadUserName];

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:@"lili" forKey:@"userName"];

        [defaults synchronize];

        NSString *name = [defaults objectForKey:@"userName"];
        NSLog(@"name = %@",name);

        //KVC,KVO

        Person *person = [[Person alloc] init];
        [person setValue:@"sam" forKey:@"name"];
        NSLog(@"name = %@",[person valueForKey:@"name"]);

//        NSInteger age;
//        [person setValue:@(age) forKey:@"age"];

        person.age = 10;
        NSLog(@"age = %@",[person valueForKey:@"age"]);

        Dog *dog = [[Dog alloc] init];

        [dog setValue:person forKey:@"master"];
        [dog setValue:@"boss" forKeyPath:@"master.name"];

        NSLog(@"%@",[dog valueForKeyPath:@"master.name"]);

        [dog dogMasterName];

        [dog setValue:@"good" forKey:@"dogHealth"];
        [dog setValue:@"die" forKey:@"dogHealth"];
    }
    return 0;
}

Singleton.h

#import <Foundation/Foundation.h>

@interface Singleton : NSObject<NSCopying>

@property (nonatomic, copy) NSString *name;

//standard,default,share,getInstance
+ (Singleton *)shareInstance;

@end

Singleton.m

#import "Singleton.h"

@implementation Singleton

static Singleton *instance = nil;

+ (Singleton *)shareInstance{

    @synchronized(self) {
        if (instance == nil) {
            instance = [[Singleton alloc] init];
        }

        return instance;
    }

}


//GCD

//+ (instancetype)allocWithZone:(struct _NSZone *)zone{
//    
//    @synchronized(self) {
//        if (!instance) {
//            instance = [super allocWithZone:zone];
//        }
//        
//        return instance;
//    }
//    
//}
//
//- (id)copyWithZone:(NSZone *)zone{
//    
//    return self;
//
//}
//
//- (instancetype)retain{
//    
//    return self;
//
//}
//
//
//- (oneway void)release{
//
//}
//
//- (instancetype)autorelease{
//    return self;
//}
//
//- (NSUInteger)retainCount{
//    return NSUIntegerMax;
//
//}
//
@end

Login.h

#import <Foundation/Foundation.h>

@interface Login : NSObject

@property (nonatomic, copy) NSString *userName;

- (void)saveUserName;

- (void)loadData;

@end

Login.m

#import "Login.h"
#import "Singleton.h"
@implementation Login

- (void)saveUserName{

    Singleton *singleton = [Singleton shareInstance];
    self.userName = @"小神";

    singleton.name = self.userName;

}

- (void)loadData{

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];       

    NSString *name = [userDefaults objectForKey:@"userName"];
}

@end

User.h

#import <Foundation/Foundation.h>
#import "Login.h"
@interface User : NSObject

@property (nonatomic, retain) Login *loginer;
- (void)userName:(Login *)loginer;

- (void)loadUserName;
@end

User.m

#import "User.h"
#import "Singleton.h"
@implementation User

- (void)userName:(Login *)loginer{

    NSLog(@"login name = %@",loginer.userName);
}

- (void)loadUserName{

    Singleton *singleton = [Singleton shareInstance];
    NSLog(@"singleton name = %@",singleton.name);
}
@end

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;

- (void)test;
@end

Person.m

#import "Person.h"

@implementation Person

- (void)test{

    NSLog(@"%@",_name);
}

@end

Dog.h

#import <Foundation/Foundation.h>
#import "Person.h"
@interface Dog : NSObject

@property (nonatomic, retain) Person *master;
@property (nonatomic, copy) NSString *dogHealth;

- (void)dogMasterName;

@end

Dog.m

#import "Dog.h"

@implementation Dog

- (instancetype)init
{
    self = [super init];
    if (self) {
        //1.添加一个观察者
        [self addObserver:self forKeyPath:@"dogHealth" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];


    }
    return self;
}

//2.响应事件
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

    NSLog(@"object = %@,change = %@",object,change);

    if ([change[@"new"] isEqualToString:@"die"]) {
        NSLog(@"报警");
    }   
}

- (void)dogMasterName{
    NSLog(@"%@",self.master.name);
}

//3.移除观察者
- (void)dealloc
{
    [self removeObserver:self forKeyPath:@"dogHealth"];
    [super dealloc];
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值