1.首先创建Person类,有两个属性 name 和 sex
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *sex;
2.在viewController中声明person的属性,并给person类的两个属性添加观察者
代码如下#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property(nonatomic,strong)Person *person;
@end
@implementation ViewController
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.person.name=@"sssss";
self.person.sex=@"dddd";
self.person.name=@"sssss";
}
- (void)viewDidLoad {
[super viewDidLoad];
self.person=[Person new];
self.person.name=@"asd";
self.person.sex=@"qweq";
[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:@"person"];
[self.person addObserver:self forKeyPath:@"sex" options:NSKeyValueObservingOptionNew context:@"person"];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"%@",keyPath);
}
3.在person.m文件中重写两个方法,前者为关闭默认实现,后者监听变化
#import "Person.h"
@implementation Person
+(BOOL)automaticallyNotifiesObserversForKey:(NSString *)key{
if ([key isEqualToString:@"name"]) {
return NO;
}else{
return [super automaticallyNotifiesObserversForKey:key];
}
}
-(void)setName:(NSString *)name{
if (_name!=name) {
[self willChangeValueForKey:@"name"];
_name=name;
[self didChangeValueForKey:@"name"];
}
}