// // 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