使用Block实现KVO.doc

使用Block实现KVO

使用Block实现KVO SJKVOController的用法 只需要引入NSObject+SJKVOController.h头文件就可以使用SJKVOController。 先看一下它的头文件: #import Foundation/Foundation.h #import SJKVOHeader.h @interface NSObject (SJKVOController) //============== add observer ===============// - (void)sj_addObserver:(NSObject *)observer forKeys:(NSArray NSString **)keys withBlock:(SJKVOBlock)block; - (void)sj_addObserver:(NSObject *)observer forKey:(NSString *)key withBlock:(SJKVOBlock)block; //============= remove observer =============// - (void)sj_removeObserver:(NSObject *)observer forKeys:(NSArray NSString **)keys; - (void)sj_removeObserver:(NSObject *)observer forKey:(NSString *)key; - (void)sj_removeObserver:(NSObject *)observer; - (void)sj_removeAllObservers; //============= list observers ===============// - (void)sj_listAllObservers; @end 从上面的API可以看出,这个小轮子: 1. 支持一次观察同一对象的多个属性。 2. 可以一次只观察一个对象的一个属性。 3. 可以移除对某个对象对多个属性的观察。 4. 可以移除对某个对象对某个属性的观察。 5. 可以移除某个观察自己的对象。 6. 可以移除所有观察自己的对象。 6. 打印出所有观察自己的对象的信息,包括对象本身,观察的属性,setter方法。 下面来结合Demo讲解一下如何使用这个小轮子: 在点击上面两个按钮中的任意一个,增加观察: 一次性添加: - (IBAction)addObserversTogether:(UIButton *)sender { NSArray *keys = @[@number,@color]; [self.model sj_addObserver:self forKeys:keys withBlock:^(id observedObject, NSString *key, id oldValue, id newValue) { if ([key isEqualToString:@number]) { dispatch_async(dispatch_get_main_queue(), ^{ self.numberLabel.text = [NSString stringWithFormat:@%@,newValue]; }); }else if ([key isEqualToString:@color]){ dispatch_async(dispatch_get_main_queue(), ^{ self.numberLabel.backgroundColor = newValue; }); } }]; } 分两次添加: - (IBAction)addObserverSeparatedly:(UIButton *)sender { [self.model sj_addObserver:self forKey:@number withBlock:^(id observedObject, NSString *key, id oldValue, id newValue) { dispatch_async(dispatch_get_main_queue(), ^{ self.numberLabel.text = [NSString stringWithFormat:@%@,newValue]; });

文档评论(0)

1亿VIP精品文档

相关文档