KVC符合一类

时间:2013-01-20 15:33:44

标签: objective-c cocoa kvc

在iOS文档中阅读KVC Compliant时。我试过测试一堂课。 KVC Class是否合规?

但我有一些问题:

  1. 属性“名称”,“年龄”没有设置者,并且该类仍然使用KVC而没有错误 并且不会解雇任何例外

  2. 如果没有为属性创建setter,编译器会做什么?可以 创建一对setter和getter?

    Person.h

    @interface Person : NSObject
    {
        NSString *name;
        NSInteger age;
    }
    

    Person.m

    @implementation Person
    
    - (id)init
    {
        self = [super init];
        if (self) {
            name = @"Duc Nguyen";
            age = 10;
        }
        return self;
    }
    

    ViewController.m

    - (IBAction)showKeyKVC:(id)sender {
        //--test kvc
        name1.text = [person valueForKey:@"name"];
        age1.text = [NSString stringWithFormat:@"%@", [person valueForKey:@"age"]];
    }
    
  3. 当我按下按钮时,结果是:年龄:10岁,姓名:Duc Nguyen。 在这种情况下,我不明白班级如何使用KVC?

1 个答案:

答案 0 :(得分:4)

答案在Accessor Search Patterns for Simple Attributes KVC指南中。

  

setValue的默认搜索模式:forKey:

     

当为属性调用setValue:forKey:的默认实现时,使用以下搜索模式:

     
      
  1. 在接收者的类中搜索名称与模式set<Key>:匹配的访问者方法。
  2.   
  3. 如果未找到访问者,并且接收者的类方法accessInstanceVariablesDirectly返回YES,则会在接收者中搜索名称与模式_<key>匹配的实例变量,_is<Key><key>is<Key>,按此顺序。
  4.   

默认实现是向accessInstanceVariablesDirectly方法返回YES,因此KVC机制实际上是从nameage实例变量中获取值。