zoukankan      html  css  js  c++  java
  • IOS学习之初识KVC

    什么是kvc?

            kvc (key-value coding )键值编码,是ios 提供的一种通过key间接的来访问对象属性的一直方式。

    哪些类支持kvc操作?

           kvc的操作方法由NSKeyValueCoding协议提供,也就是说只要是这个协议的对象都支持kvc操作。

    具体怎么使用?

      动态设置:

              setValue:属性值 forKey:属性名(用于简单路径)

              setValue:属性值 forKeyPath:属性路径 比如修改Person对象中Car的品牌 路径就是(car.brand) 

      动态读取: 

                valueForKey:属性名

                valueForKeyPath:属性名(用于复合路径)

     具体写个测试程序看下:

      Person.h

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    {
        @private
           NSString *address;
        
    }
    
    @end

    Person.m

    #import "Person.h"
    #import "Car.h"
    
    @interface Person ()
    
    @property (nonatomic ,strong) NSString *name;
    
    @property (nonatomic,strong)Car *car;
    
    @end
    
    @implementation Person
    
    -(id)init
    {
        self=[super init];
        if(self){
            self =[super init];
            self.car=[[Car alloc]init];
        }
        return self;
    }
    
    @end

    Car.h

    #import <Foundation/Foundation.h>
    
    @interface Car : NSObject
    
    @end

    Car.m

    #import "Car.h"
    
    @interface Car()
    
    @property (nonatomic ,strong) NSString *brand;
    
    @end
    
    @implementation Car
    
    @end

    上述是就是本知识点的测试程序,我全部写的都是私有变量,我个人觉得用这种kvc机制去修改一个公有属性是一件完全没有意义的事情,直接不赋值不挺好?没必要绕这么一圈吧?可能我初学乍道,有别的原因希望有人能告诉我!

    直接看具体测试:

        [self.person setValue:@"zhejiang" forKey:@"address"];
        [self.person setValue:@"whoislcj" forKey:@"name"];
        [self.person setValue:@"aodi" forKeyPath:@"car.brand"];
        
        NSLog(@"person.name ---->%@",[self.person valueForKey:@"name"]);
        NSLog(@"person.address ---->%@",[self.person valueForKey:@"address"]);
        NSLog(@"person.car.name ---->%@",[self.person valueForKeyPath:@"car.brand"]);
  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/whoislcj/p/5502826.html
Copyright © 2011-2022 走看看