您的位置:首页 > 其它

KVO默认关闭

2015-12-05 11:13 316 查看
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"];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: