main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Ibokan.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//(1)KVO测试
Ibokan *ib=[Ibokan new];
NSLog(@"%@",ib.frontDesk.someone);
//改变属性值,会自动调用observeValueForKeyPath
// [ib comein:@"daleng"];
}
return 0;
}
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,copy) NSString *someone;
@end
Ibok.h
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Ibokan : NSObject
//前台妹妹
@property (nonatomic,strong) Person *frontDesk;
//模拟进来一个人,改变所记录的名字
-(void)comein:(NSString *)name;
@end
Ibok.m
#import "Ibok.h"
@implementation Ibokan
- (instancetype)init
{
self = [super init];
if (self) {
self.frontDesk= [ Person new];
self.frontDesk.someone=@"yang";
//1.注册订阅者
[self.frontDesk addObserver:self forKeyPath:@"someone" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
}
return self;
}
//2.处理属性改变
//一旦.someone改变,此方法就是调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"==================");
NSLog(@"%@",change);
NSLog(@"新的值:%@",change[@"new"]);
NSLog(@"旧的值:%@",change[@"old"]);
if ([change[@"new"]isEqualToString:@"ladeng"]) {
NSLog(@"校长出来迎接");
}
}
-(void)comein:(NSString *)name
{
self.frontDesk.someone=name;
}
-(void)dealloc
{
[self.frontDesk removeObserver:self forKeyPath:@"someone"];
}
@end