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"]);
  • 相关阅读:
    D3D中的渲染状态简介
    D3D HOOK实现透视讲解
    引入外部文件的时候为什么省略http:
    hbase java Api练习
    [待解决]ColumnPrefixFilter 不能过滤出全部满足条件的,
    代码风格
    eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
    hbase练习题
    hive安装
    脚本 sh 和 ./ 的区别,exec和source
  • 原文地址:https://www.cnblogs.com/whoislcj/p/5502826.html
Copyright © 2011-2022 走看看