supersr--KVO/KVC

本文介绍了KVO(键值观察)基于runtime机制的内部实现原理,包括动态派生类的创建及其如何重写setter方法来实现观察者模式。同时探讨了KVC(键值编码)的价值,例如访问和修改私有成员变量的方法,并对比了valueForKey与valueForKeyPath的不同之处。

KVO内部实现原理

1.KVO是基于runtime机制实现的.

2.当某个类的对象第一次被观察是,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的set方法.派生类在被重写的setter方法实现真正的通知机制(-->>NSKVONotifying_类名);

苹果不希望这个机制暴露在外部。除了setter,这个动态生成的子类同时也重写了-class方法,依旧返回原先的class!如果不仔细看的话,被KVO过的object看起来和原先的object没什么两样。

 

KVC的价值
1.可以访问私有成员变量的值
2.可以间接修改私有成员变量的值(替换系统自带的导航栏.tabbar)
 
列如:在.h里面声明一个私用属性(@pivate),在.m里面去访问就得要用KVC去访问,
KVC首先它会去调用属性的get方法,找不到就取访问系统生成的下划线的成员属性;
 
valueForKey:   >>只能访问当前对象的属性
valueForKryPath:  >>包含了valueForKey的功能 >>>能利用运算符一层一层网内部访问属性
valueForKeypath: >> 可以这样访问 >> [p valueForKeyPath:@“p.dog.name”] 而valueForKey: 则不能; 
 
http://tech.glowing.com/cn/implement-kvo/

转载于:https://www.cnblogs.com/supersr/p/4829527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值