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

但是我有一些问题:


属性“名称”,“年龄”没有设置器,并且该类仍在使用KVC且没有错误
不会引发任何异常
如果没有为属性创建设置器,则编译器会做什么?可以
创建一对setter和getter?



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




@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"]];
}



当我按下按钮时,结果是:年龄:10,姓名:Duc Nguyen。
我不明白在这种情况下该类如何使用KVC?

最佳答案

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


  setValue:forKey的默认搜索模式:
  
  为属性调用setValue:forKey:的默认实现时,将使用以下搜索模式:
  
  
  在接收者的类中搜索名称与模式set<Key>:匹配的访问器方法。
  如果找不到访问器,并且接收方的类方法accessInstanceVariablesDirectly返回YES,则在接收方中搜索名称与模式_<key>_is<Key><key>is<Key>匹配的实例变量。那个命令。
  


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

关于objective-c - 符合KVC的类别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14426084/

10-12 07:17