//
// ViewController.h
// 14-KVO的使用 #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end
//
// ViewController.m
// 14-KVO的使用
//
/*
KVO: Key Value Observing (键值监听)--->当某个对象的属性值发生改变的时候(用KVO监听)
*/ #import "ViewController.h"
#import "XMGPerson.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; XMGPerson *person = [[XMGPerson alloc] init];
person.name = @"zs"; XMGPerson *person1 = [[XMGPerson alloc] init];
person.name = @"zs";
/*
作用:给对象绑定一个监听器(观察者)
- Observer 观察者
- KeyPath 要监听的属性
- options 选项(方法方法中拿到属性值,拿到新值和旧值)
*/
[person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; person.name = @"ls"; person1.name = @"ls"; person.name = @"ww"; // 移除监听
[person removeObserver:self forKeyPath:@"name"];//移除哪个对象的哪个属性的监听
} /**
* 当监听的属性值发生改变
*
* @param keyPath 要改变的属性
* @param object 要改变的属性所属的对象
* @param change 改变的内容
* @param context 上下文
*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"%@------%@------%@------%@", keyPath, object, change,context);
/*
name------<XMGPerson: 0x6080000102d0>------{kind = 1;new = ls;old = zs;}------(null)
*/
} @end
//
// XMGPerson.h
// 14-KVO的使用 #import <Foundation/Foundation.h> @interface XMGPerson : NSObject /** 姓名 */
@property (nonatomic, copy) NSString *name; //string用copy @end
//
// XMGPerson.m
// 14-KVO的使用 #import "XMGPerson.h" @implementation XMGPerson @end

最新文章

  1. hdu 1811Rank of Tetris (并查集 + 拓扑排序)
  2. Cocos2d-x 3.2 学习笔记(五)Sprite Node
  3. HDU5670Machine(抽象进制)
  4. 安装SQL Server 2012 『企业中文版』
  5. U3D自定义Inspector项未触发保存事件的解决方案
  6. Package &#39;DXCore for Visual Studio&#39; has failed to load properly
  7. 使用 Swift 制作一个新闻通知中心插件(2)
  8. POJ 1005 解题报告
  9. Test Bench基础知识笔记
  10. bzoj 1066 : [SCOI2007]蜥蜴 网络流
  11. 必须掌握的八个cmd命令
  12. 判断json是否包含了每个键 PHP
  13. C++中构造函数,拷贝构造函数和赋值函数的区别和实现
  14. 设计模式之模版方法模式(Template Method Pattern)
  15. MySQL(存储过程,支持事务操作)
  16. 结对作业——随机生成四则运算(Core 第7组)
  17. OpenStack安装部署(二)
  18. Edge/Chrome/火狐/Safari/Opera和IE
  19. loadrunner--步长(Pacing)的设置及作用
  20. DevExpress.XtraGrid

热门文章

  1. 题解 P1967 货车运输
  2. 【Html,Css,JavaScript】初学总结
  3. Angular网络请求的封装
  4. [bzoj3531][Sdoi2014][旅行] (主席树+树链剖分)
  5. MSP430F5529时钟系统深究
  6. 动态创建div(鼠标放上显示二维码)
  7. MySQL最优配置文件模板&#183;2016-11-28
  8. 592. Fraction Addition and Subtraction
  9. TYVJ1716 上帝造题的七分钟
  10. Eclipse使用Maven时,修改默认中央仓库后的配置报错找不到包的问题解决