使用Block实现KVO.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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]; });

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档