1
在iOS文档中阅读KVC兼容时。我试图测试一个班级。 KVC Class是否合规?KVC兼容类
但我有一些问题:
没有setter方法的属性“姓名”,“年龄”,类仍然使用KVC没有错误 ,没有异常将被解雇
当没有为属性创建setter时,编译器会做什么? 是否创造了一对二传手和获得者?
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"]]; }
当我按下按钮的结果是:年龄:10,名称:Duc Nguyen。 我不明白在这种情况下班级如何使用KVC?
因此,我强烈建议覆盖'+ accessInstanceVariablesDirectly'来为所有自定义类返回NO。 KVC直接访问实例变量的方式是一种可怕的封装和隐藏错误。 –