美文网首页
KVC(3) 访问集合属性

KVC(3) 访问集合属性

作者: yxibng | 来源:发表于2020-01-23 10:44 被阅读0次

访问集合属性

普通方式访问

valueForKey:
setValue:forKey:

可变代理方式

mutableArrayValueForKey:
mutableArrayValueForKeyPath:
 
mutableSetValueForKey:
mutableSetValueForKeyPath:
 
mutableOrderedSetValueForKey:
mutableOrderedSetValueForKeyPath:
  • 当你修改代理对象的时候,添加,删除,替换里面的内容,对应的集合属性的内容也会跟着修改。
  • 当试图修改一个非可变集合的内容的时候,效率会特别高
    • 正常的修改非可变集合的方式为
      1. valueForKey:得到non-mutable集合(如 NSArray *array)
      2. 根据这个非可变集合(array),创建一个mutalbe集合(NSMutableArray *mArray)
      3. 修改这个mArray
      4. 通过 setValue:forKey:将修改后的集合重新赋值
    • 可变代理方式
      1. mutableArrayValueForKey:得到mutalbe代理(NSMutableArray *mArray)
      2. 修改这个mArray
      3. 对代理对象的修改自动反馈到对应的属性上面

Account

@interface Account : NSObject

@property (nonatomic, copy) NSString *bankName;
@property (nonatomic, assign) NSInteger money;

@end

Person

@interface Person : NSObject

@property (nonatomic, strong) NSArray *accounts;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end

ViewController

@interface ViewController ()

@property (nonatomic, strong) Person *person;

@end


- (void)viewDidLoad {
    [super viewDidLoad];
    
    _person = [[Person alloc] init];
    _person.name = @"张三";
    _person.age = 10;
    
    Account *account_1 = [[Account alloc] init];
    account_1.bankName = @"中国银行";
    account_1.money = 100;
    
    Account *account_2 = [[Account alloc] init];
    account_2.bankName = @"交通银行";
    account_2.money = 200;
    _person.accounts = @[account_1, account_2];
    
    
    // Do any additional setup after loading the view.
}

- (IBAction)newAccount:(id)sender {
    
    NSMutableArray *accounts = [self.person mutableArrayValueForKey:@"accounts"];
    
    Account *account_1 = accounts.firstObject;
    account_1.money = 999;
    
    Account *account_3 = [[Account alloc] init];
    account_3.bankName = @"建设银行";
    account_3.money = 500;
    
    [accounts addObject:account_3];
    
    for (Account *account  in self.person.accounts) {

        NSLog(@"name = %@, money = %ld", account.bankName, (long)account.money);
    }
    
}

相关文章

  • KVC(3) 访问集合属性

    访问集合属性 普通方式访问 可变代理方式 当你修改代理对象的时候,添加,删除,替换里面的内容,对应的集合属性的内容...

  • iOS - 关于 KVC 的一些总结

    目录1. 什么是 KVC2. 访问对象属性3. 访问集合属性4. 使用集合运算符5. 自定义集合运算符6. 非对象...

  • valueForKeyPath:的妙用

    KVC (KVC)键值编码相信大家都不陌生,常用来访问对象属性,也可以访问集合属性。还有一些可以给通过此方法访问一...

  • KVC 访问对象 / 集合属性

    一个对象通常在interface声明它的property,这些property属于以下类别之一: Attribut...

  • 了解 Key-Value Coding

    Key-Value Coding KVC的使用 对象属性的访问(基本类型、集合类型、集合操作符,(keyPath)...

  • KVC 与 KVO 使用和原理解析

    KVC 什么是 KVC KVC 主要方法 KVC 定义了一种按名称访问对象属性的机制,支持这种访问的主要方法是: ...

  • 面试

    KVC KVC可以通过key直接访问对象的属性,或者给对象的属性赋值(包括私有属性),这样可以在运行时动态的访问或...

  • 利用runtime获取私有属性名及类型

    在iOS中没有绝对的私有属性,虽然没有办法直接访问私有属性,但是可以利用kvc,kvo间接访问私有属性。使用kvc...

  • iOS KVC运用

    主要应用场景 KVC 属性赋值 添加和访问私有成员变量(ivar) 字典转模型 取值 模型转字典 集合操作符 自定...

  • iOS-KVC/KVO

    一、KVC 通过关键字,访问属性及成员变量。1.kvc当调用setValue:属性值 forKey:@”name“...

网友评论

      本文标题:KVC(3) 访问集合属性

      本文链接:https://www.haomeiwen.com/subject/iiknzctx.html