KVO 的键值依赖

之前一直考虑KVO的架构设计,其中一个比较麻烦的问题就是如果把observer加在我自己定义的类对象上呢?问题就来了,我可能需要任何其中一个属性的改改变都触发KVO去刷新,怎么办?挨个写addObserver么,似乎不很优雅,怎么办呢,发现KVO居然有键值依赖试了3个小时,终于搞定

#import "SimOneBody.h"
@interface SimOneBody ()
@property (nonatomic, strong) NSString *wholeBody;
@end
@implementation SimOneBody
@synthesize age,name;

+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
    NSSet * keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
    NSArray * moreKeyPaths = nil;
    
    if ([key isEqualToString:@"wholeBody"])
    {
        moreKeyPaths = [NSArray arrayWithObjects:@"age",@"name", nil];
    }
    
    if (moreKeyPaths)
    {
        keyPaths = [keyPaths setByAddingObjectsFromArray:moreKeyPaths];
    }
    
    return keyPaths;
}

@end

这是一段Demo,目的就是利用键值依赖实现只observer一个keyPath就能监听整个变量的所有属性,目的是达到了,但是效率如何不知道。目前如果采用这种办法就可以实现一种架构。

适用的场合是,当程序中有多个处理逻辑都需要处理同一个数据,注意是同一个数据,比如说用户要编辑一个自己喜欢的文档,那么对这本书要做评价,打分,添加截图,添加水印等等写入操作时,也就是说在多个地方编辑又需要在多个地方刷新,那么就可以做一个singleton的handler,持有这个文档的对象,谁要去操作它就加一个观察者,观察者的回调逻辑在观察者内部实现,当对他的操作完成时,移除该观察者,这就能保证所有对该数据的操作和刷新都完全同步,不需要handle复杂的逻辑代码了,每个观察者互相都是独立的,只和handler通信,如果需要修改写入逻辑只需要修改观察者,另外对于KVO来说,数据只和controller交互,而刷新UI的逻辑是Controller来完成的,UI完全不知道数据是什么,完成了隔离...这是暂时的想法,还没有经过实践,也许还有不少问题,后面会跟进这一点的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值