在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机制实际上是从name
和age
实例变量获取值的。
关于objective-c - 符合KVC的类别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14426084/