Studen类
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (nonatomic,strong) NSString *name;
-(id) init;
-(void) run;
@end
#import "Student.h"
@implementation Student
-(id) init {
if (self=[super init]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(run) name:@"kill" object:nil];
}
return self;
}
-(void) run {
NSLog(@"KVO Student run");
}
-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"kill" object:nil];
}
@end
Teacher类
#import <Foundation/Foundation.h>
#import "Student.h"
@interface Teacher : NSObject
@property (nonatomic,weak) Student *student;
-(id) initAddObseverFromStudent:(Student *)student;
-(void) wantToKillStudent;
@end
#import "Teacher.h"
@implementation Teacher
@synthesize student = _student;
-(id) initAddObseverFromStudent:(Student *) student{
if (self = [super init]) {
self.student = student;
[self.student addObserver:self forKeyPath:@"_name" options:NSKeyValueObservingOptionNew |1 context:nil];
}
return self;
}
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (![change[@"new"] isEqualToString:change[@"old"]]) {
NSLog(@"KVC %@",change[@"new"]);
}
}
-(void) wantToKillStudent {
NSLog(@"KVO Teacher wantTokill");
[[NSNotificationCenter defaultCenter] postNotificationName:@"kill" object:self userInfo:@{@"key":@"value"}];
}
-(void) dealloc {
[self.student removeObserver:self forKeyPath:@"_name"];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"kill" object:nil];
}
@end