• iOS -- KVC && KVO


    #import "ViewController.h"
    #import "Person.h"
    #import "Student.h"
    @interface ViewController ()
    {
        NSString *_text;
    }
    @property (weak, nonatomic) IBOutlet UITextField *plicceholder;
    @property (nonatomic, strong) Person *person;
    @property (nonatomic, strong) NSMutableArray *tempArray;
    @end
    
    @implementation ViewController
    //KVC key -Value - Coding
    
    //KVO ,key - value - observer,键值观察,属性只要调用set方法就会触发KCO
    - (void)viewDidLoad {
        [super viewDidLoad];
      
        [self.plicceholder setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
        //属性初始化,必须使用self.进行调用.
        self.person = [[Person alloc] init];
        //1.添加观察者
        //2.self.person是被观察的对象本身
        //self,观察者
        //keyPath,观察的实例变量
        //options ,观察哪方面
        [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
        
        
        [self.person addObserver:self forKeyPath:@"_age" options:NSKeyValueObservingOptionNew context:nil];
        
        [self addObserver:self forKeyPath:@"_text" options:NSKeyValueObservingOptionNew context:nil];
        
        
        self.tempArray = [@[] mutableCopy];
        [self addObserver:self forKeyPath:@"tempArray" options:NSKeyValueObservingOptionNew context:nil];
    }
    
    - (IBAction)kvo_fire:(id)sender {
        
        //self.person.name = @"张浩浩";
        [self.person setValue:@"18" forKey:@"_age"];
        
        
    }
    
    
    
    //接收kvo触发事件
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
        NSLog(@"object = %@,keyPath = %@", object,keyPath);
       // NSLog(@"%@", keyPath);
    }
    - (IBAction)kvc_setValueForKey:(id)sender {
        
        Person *p = [[Person alloc] init];
        
        [p setValue:@"豪豪" forKey:@"name"];
        NSLog(@"%@", p.name);
        
        [p setValue:@"18" forKey:@"_age"];
        NSLog(@"%@",[p valueForKey:@"_age"]);
    }
    - (IBAction)kvc_setValueForPath:(id)sender {
        Student *stu =[[Student alloc] init];
    //    Person *p = [[Person alloc] init];
    //    stu.per = p;
        [stu setValue:@"豪豪" forKeyPath:@"per.age"];
        NSLog(@"%@", [stu valueForKeyPath:@"per.age"]);
        
    }
    
    
    
    
    - (IBAction)kvc_setValuserForkeysWithDictionary:(id)sender {
        
        NSDictionary *dic = @{@"name":@"张豪豪",@"gender":@""};
        Person *p = [[Person alloc] init];
        
        [p setValuesForKeysWithDictionary:dic];
        
        NSLog(@"%@", p.name);
        
        
    }
    - (IBAction)kvc_sum:(id)sender {
        
        NSMutableArray *ary = [@[] mutableCopy];
        for (int i = 0; i < 100; i++) {
            [ary addObject:[NSString stringWithFormat:@"%d", i]];
        }
        NSLog(@"%@", [ary valueForKeyPath:@"@sum.integerValue"]); 
    }
    
    - (IBAction)kvo_observerself:(id)sender {
        
        [self setValue:@"biubiu" forKey:@"_text"];
        
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    - (void)dealloc{
        
        //观察着不需要的时候,就需要进行注销,并不是绝对的在dealloc里面
        [self.person removeObserver:self forKeyPath:@"name"];
        [self.person removeObserver:self forKeyPath:@"_age"];
        [self removeObserver:self forKeyPath:@"_text"];
    }
    - (IBAction)kvo_mutableArray:(id)sender {
        //kvo 观察数组
        [[self mutableArrayValueForKey:@"tempArray"] addObject:@"zhaoahao"];
        
    }
    
    
    
    
    @end
    Person.h
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    {
        NSString *_age;
    }
    @property (nonatomic, copy) NSString *name;
    
    @end

    person.m

    #import "Person.h"
    
    @implementation Person
    //属性关联实例变量
    @synthesize name = _name;
    - (void)setValue:(id)value forUndefinedKey:(NSString *)key{
        
    }
    
    
    @end

    student.h

    #import <Foundation/Foundation.h>
    @class Person;
    @interface Student : NSObject
    @property (nonatomic, strong) Person *per;
    @end

    student.m

    #import "Student.h"
    #import "Person.h"
    @implementation Student
    - (id)init{
        self = [super init];
        if (self) {
            self.per = [[Person alloc] init];
        }
        return self;
    }
    @end
  • 相关阅读:
    上传文件
    vue 动态数据请求
    Layui——layerjs 用法汇总(持续更新)
    以插入排序为例子带你彻底理解算法中的时间复杂度和各种渐进符号
    flappy pig小游戏源码分析(4)——核心pig模块(未完待续)
    flappy pig小游戏源码分析(3)——解剖util
    flappy pig小游戏源码分析(2)——解剖option
    flappy pig小游戏源码分析(1)——主程序初探
    Express细节探究(1)——app.use(express.static)
    部分常用Express方法详解
  • 原文地址:https://www.cnblogs.com/wohaoxue/p/4914063.html
Copyright © 2020-2023  润新知