1.比如我们想要监听一个对象属性值 totalDuration 的变化
@interface TimerModel : NSObject
@property(assign,nonatomic)float totalDuration;
+(TimerModel *)shareTimerManager;
@end
@implementation TimerModel
static TimerModel *shareTimerModel=nil;
+(TimerModel *)shareTimerManager
{
static dispatch_once_t once;
dispatch_once(&once,^{
shareTimerModel=[[self alloc]init];
});
return shareTimerModel;
}
@end
2.在你想要监听该属性的地方 Registers anObserver
[[TimerModel shareTimerManager] addObserver:self forKeyPath:@"totalDuration" options:NSKeyValueObservingOptionNew context:nil];
3.当监听的属性值发生变化时
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
//这里面写 totalDuration变化时你想要执行的方法
}
4.最重要的一步在self对象释放的时候,移除监听
-(void)dealloc
{
//把注册的监听移除
[[TimerModel shareTimerManager] removeObserver:self forKeyPath:@"totalDuration"];
}