KVO&KVC

KVO和KVC的区别,这是一道面试经常会问到的题。其实这两个根本就没有什么关系。下面我们来通过一个demo来认识一下KVC和KVC,同时通过这个demo来看一下Model层对Controller层之间的通信。Notification和kvo
自定义model层,person类

@implementation Person
- (instancetype)init
{
    self = [super init];
    if (self) {
        [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {


            self.age++;
//            [[NSNotificationCenter defaultCenter]postNotificationName:@"改变年龄通知" object:self];

        }];
    }
    return self;
}
@end

CONTROLLER中代码

- (void)viewDidLoad {
    [super viewDidLoad];

    Person *p = [Person new];
    p.age = 10;
    p.name = @"zhangsan";
    //通过kvc的方式对对象的属性赋值和取值
//    [p setValue:@"xiaoming" forKey:@"name"];
//    
//    NSString *name = [p valueForKey:@"name"];


    self.ageLabel.text = @(p.age).stringValue;

//    通过NOtification实现M和C的交互
//    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ageChangeAction:) name:@"改变年龄通知" object:nil];

    //通过KVO监听Person中age值的改变

    [p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];


}

Notification对应的方法

//- (void)ageChangeAction:(NSNotification *)noti{
//    Person *p = noti.object;
//    
//    self.ageLabel.text = @(p.age).stringValue;
//}

KVO对应的方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    Person *p = object;
    self.ageLabel.text = @(p.age).stringValue;

}

可以看到KVO还有通知都是检测到Model层年龄的改变告诉Controller层。让Controller层收到数据。
而KVC是对对象的属性赋值。Key Value coding

KVO和KVO完全是两个不想关的东西!!!!!

如果对MVC之间通信,相互传送数据,消息还有不明白的同学,可以参考附代码分析的MVC通信博客:
http://blog.csdn.net/lee727n/article/details/71513598

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值