zoukankan      html  css  js  c++  java
  • KVO

    Dog类.h:

    @interface Dog : NSObject{

        NSString *dogName;

    }

    Person类.h:

    #import "Dog.h"

    @interface Person : NSObject{

        NSString *name;

        int age;

        Dog *dg;

    }

    Person *xiaowang = [[Person alloc]init];

            //使用KVC设置变量的值

            //使用之前必须知道变量的名字

            [xiaowang setValue:@"小王" forKey:@"name"];

            NSString *name = [xiaowang valueForKey:@"name"];

            NSLog(@"%@",name);

            

            //对类里面的某个对象变量的实行设置

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

            [xiaowang setValue:ww forKey:@"dg"];

            

            [xiaowang setValue:@"汪汪" forKeyPath:@"dg.dogName"];

            NSString *dgName = [xiaowang valueForKeyPath:@"dg.dogName"];

            NSLog(@"%@",dgName);

     KVO2:

    CreatedCard类.h:

    @interface CreatedCard : NSObject{

        int money;

    }

    Person类.h:

    @property (nonatomic,strong)CreatedCard *card;

    Person类.m:

    -(void)dealloc{

        [_card release];

        [self removeObserver:self forKeyPath:@"card.money"];

        [super dealloc];

    }

    -(instancetype)init{

        if (self = [super init]) {

            self.card = [[[CreatedCard alloc]init]autorelease] ;

            //当前这个类添加一个监听器,监听card对象的money属性,监听这个属性变化之前之后的值

            [self addObserver:self forKeyPath:@"card.money" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

        }

        return self;

    }

    //属性变化之后的回调

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

        int oldValue = [[change objectForKey:NSKeyValueChangeOldKey]intValue];

        int newValue = [[change objectForKey:NSKeyValueChangeNewKey]intValue];

        NSLog(@"old:%d",oldValue);

        NSLog(@"new:%d",newValue);

    }

     main:

    #import <Foundation/Foundation.h>

    #import "Person.h"

    int main(int argc, const char * argv[]) {

        @autoreleasepool {

            Person *xw = [[[Person alloc]init]autorelease];

            [xw setValue:@1000 forKeyPath:@"card.money"];

            [xw setValue:@2000 forKeyPath:@"card.money"];

        }

        return 0;

    }

  • 相关阅读:
    cmake Found package configuration file but it set OpenCV_FOUND to FALSE
    pthread库"timespec"结构体重定义解决
    【Windows10】运行软件后,窗口不显示的解决办法
    Windows下Cmake生成动态库install命令失败、导入库概念
    【转载】多尺度增强算法Retinex算法(MSRCR)的原理、实现及应用
    【转载】Ubuntu 和 Windows 之间进行远程访问和文件互传
    博客园Markdown编辑器
    合并两个有序数组(C++)
    从协方差矩阵的估算领会MATLAB矩阵编程思维
    常见排序算法的性能对比
  • 原文地址:https://www.cnblogs.com/yangqinglong/p/5363204.html
Copyright © 2011-2022 走看看