有一个Person类,Person里面有一个Tiger(为了严重KVC的keypath用),还有一个PersonMonitor观察者类
Person.h
#import <Foundation/Foundation.h> @interface Tiger : NSObject @property(nonatomic,strong) NSString *tigerName; @end @interface Person : NSObject @property(nonatomic,strong) NSString *strName; @property(nonatomic,strong) NSString *strPassword; @property(nonatomic,strong) Tiger *tiger; @end
PersonMonitor.m
// // PersonMonitor.m // xcyUI // // Created by XiangChenyu on 14-4-17. // Copyright (c) 2014年 XiangChenyu. All rights reserved. // #import "PersonMonitor.h" #import "Person.h" @implementation PersonMonitor - (instancetype)init { self = [super init]; if (self) { } return self; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqual: @"strName"]) { NSLog(@"strName-->%@",@"hello"); } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } @end
调用结果:
Person* per = [[Person alloc] init]; Tiger *tiger = [[Tiger alloc] init]; per.tiger = tiger; [per setValue:@"strXX" forKey:@"strName"]; NSLog(@"%@",[per valueForKey:@"strName"]); [per setValue:@"smalltiger" forKeyPath:@"tiger.tigerName"]; NSLog(@"%@",[per valueForKeyPath:@"tiger.tigerName"]); PersonMonitor *perMonitoer = [[PersonMonitor alloc]init]; [per addObserver:perMonitoer forKeyPath:@"strName" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; [per setValue:@"dd" forKey:@"strName"]; [per removeObserver:perMonitoer forKeyPath:@"strName"];
自我认识-KVC KVO 例子,布布扣,bubuko.com
原文:http://blog.csdn.net/xcysuccess3/article/details/23969629