- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用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
- 注册可靠性工程师模拟试题3.pdf VIP
- 生猪屠宰兽医卫生检验人员理论考试题及答案.doc VIP
- 福彩3D历史数据EXCEL自动更新.xls VIP
- 期中复习备考Unit1-unit6话题补全对话 人教版九年级英语全册.docx VIP
- 注册可靠性工程师模拟试题6.pdf VIP
- 2019年第十三届全国大学生化工设计竞赛作品江汉大学年产89万吨醋酸乙烯酯生产项目设计文档3-VAC初步设计说明书.docx VIP
- 注册可靠性工程师模拟试题2.pdf VIP
- 译林牛津版小学五年级上册英语阅读理解练习题含答案解析.pdf VIP
- 注册可靠性工程师模拟试题8.pdf VIP
文档评论(0)