KVO即“鍵值監(jiān)聽”,通常需要三步:
1、添加監(jiān)聽對象【addObserver: forKeyPath: options: context:】
2予颤、執(zhí)行監(jiān)聽代理【- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object{}】
3缝彬、移除監(jiān)聽【removeObserver: forKeyPath: context: 】
圖片示例:
代碼示例:
//----------在.h文件中
#import<UIKit/UIKit.h>
@interfaceViewController :UIViewController
@end
//----------在.m文件中
#import"ViewController.h"
@interface ViewController()
@property(nonatomic ,strong)NSString *price;
@end
@implementation ViewController
- (void)viewDidLoad {
[superview DidLoad];
self.price=@"10";
//添加監(jiān)聽對象
[self addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
NSLog(@"---------%@",_price);
[self performSelector:@selector(changeGrade) withObject:nil afterDelay:5.0];
}
- (void)changeGrade {
self.price=@"10000";
}
//執(zhí)行監(jiān)聽代理
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object
change:(NSDictionary*)change context:(void*)context
{
if(object ==self && [keyPath isEqualToString:@"price"]) {
NSLog(@"---------%@",_price);
}else{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
//移除監(jiān)聽
- (void)dealloc {
[self removeObserver:self forKeyPath:@"price" context:nil];
}
@end