#import "Person.h"
#import "Card.h"
@implementation Person
- (void)setCard:(Card *)card
{
_card=card;
//添加观察者,用来监视余额的变动
[self.card addObserver:self forKeyPath:@"balance" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary *)change context:(nullable void *)context
{
if ([keyPath isEqualToString:@"balance"]) {
NSLog(@"balance is changed!余额是多少:%g",self.card.balance);
}
}
- (void)dealloc
{
[self.card removeObserver:self forKeyPath:@"balance"];
}
//
// main.m
// 070303kvc
//
// Created by tianshangrenjian on 15/7/3.
// Copyright © 2015年 tianshangrenjian. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Car.h"
#import "Card.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Person *p=[[Person alloc] init];
Car *car=[[Car alloc] init];
p.car=car;
car.name=@"BWM";
//KVC 属性赋值 key value coding
[p setValue:@"fuck" forKey:@"name"];
[p setValue:@"MG" forKeyPath:@"car.name"];
Card *card=[[Card alloc] init];
p.card=card;
p.card.balance=10;
//KVOkey value observe (如:银行卡的余额发生变化的时候通知给所有者)
//分析 : 人和卡
NSLog(@"%@:%@",p.name,p.car.name);
}
return 0;
}