Objective-CiOS 开发每天分享优质文章iOS && Android

KVC change all Private

2016-06-11  本文已影响51人  IIronMan

它有三种表达方式(结果都一样)

Person *person = [[Person alloc]init];
1.person.name = @"小红";
2.[person setValue:@"小红" forKey:@"name"];
3.[person setValue:@"小红" forKey:@"_name"];
4.[person setValue:@"小红" forKeyPath:@"_name"];

设置值的方式应该是
[person setValue:@12.3 forKey:@"_hight"];

而为什么不带下划线也一样呢
[person setValue:@12.3 forKey:@"hight"];

原因:系统会查找hight相同的属性,如果找不到就会查找带下划线的_hight

在Person里面声明两个属性
 
   @property(nonatomic,copy) NSString *name;
   @property(nonatomic,strong) Dog *dog;

在Dog里面声明一个属性

   @property(nonatomic,copy) NSString *name;


    //四者没什么区别(取值直接用 [person valueForKeyPath:@" "])
    //1.person.dog.name = @"汪汪";
    //2.[person.dog setValue:@"汪汪" forKey:@"name"];
    //3.[person.dog setValue:@"汪汪" forKeyPath:@"name"];
    //4.[person setValue:@"汪汪" forKeyPath:@"dog.name"];
  
    但是第4种如果这种写就有区别了(forKey只寻找,person里面的属性,这里给dog设置名字是错误的,path是路径,需要一层一层的寻找)
    [person setValue:@"汪汪" forKey:@"dog.name"];//错误的写法
上一篇 下一篇

猜你喜欢

热点阅读