ios 设置属性依赖

写在最前面

大家都很忙, 这里我长话短说,希望能节约你一些时间
有学生类 Student 有两个属性 firstName 和 LastName. 如果想要firstName 或者 LastName 任意一个发生变化, 你都能收到, 就可以使用 属性依赖.
步骤
1. 在Student类 新增一个属性 例如叫 nameInfo

@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *nameInfo;
  1. nameInfo 添加观察者.
  2. Student类 实现属性关联方法
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
    if ([key isEqualToString:@"_nameInfo"])
    {
        NSSet *affectingKeys = [NSSet setWithObjects:@"lastName", @"firstName",nil];
        keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
    }
    return keyPaths;
}

网上说 或者实现 下面这个方法行, 但是我测试的情况看,这个方法不行.

+ (NSSet *)keyPathsForValuesAffectingName {
     return [NSSet setWithObjects:@"_lastName", @"_firstName", nil];
}

5 在Student类 实现观察者方法. 经过上面的属性依赖后, 如果firstName或者lastName变化后, 就会调用这个方法.强调这里只是告诉你,firstName 或者 lastName值改变了, 不会把他们的新,旧值带过来.

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
   NSLog(@"observe value %@", change);
}

6 切记 在dealloc 方法里移除观察者.

到此 属性依赖已经设置完成, 你可以在别的类里, 尝试改变一下first或者lastName的值.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值