使用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];
});
您可能关注的文档
- 作文常用句型模板.ppt
- 作文常见错误1.ppt
- 作文改编成改错和语法填空(环境,邀请函).pptx
- 作文替代词修改.doc
- 作业1 客源国概况(双语)埃及.ppt
- 作文开头写作.ppt
- 作文模板和重点词汇 英语二.doc
- 作文精讲1.doc
- 作文练习1.doc
- 作文类型及写作模板.ppt
- 2025-2026学年科普版七年级下册英语Unit7 Being a Smart Shopper素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit10 Lending a Helping Hand素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit11 Rules Matter素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit12 Better Together素养测评卷(含答案).docx
- 2026年中考英语语法选择专题训练(含答案).docx
- 2026中考语文二轮学思并重,涵养君子之德论语十二章、虽有佳肴、大道之行也.docx
- 中考文言文常见文化常识梳理.docx
- 中考语文二轮:内修君子德外尽忠臣心诚子书出师表修身立德主题学习.docx
- 中考语文二轮:不一样的求学路一样的成长梦送东阳马生序劝学主题学习.docx
- 中考语文二轮:《陋室铭》《爱莲说》托物寓意主题学习.docx
原创力文档

文档评论(0)