iOS开发--KVC & KVO
来源:互联网 发布:mysql定时执行sql语句 编辑:程序博客网 时间:2024/06/05 16:53
键值编码允许开发者通过名字访问对象属性, 而无需调用明确的存取方法, 这样,就可以在运行时确定属性的绑定, 而不是在编译时确定.(可以动态访问属性)例如可以通过[object valueForKey: someProperty];表达式来请求由字符串变量someProperty命名的属性值, 也能用
[object setValue: someValue forKey: someProperty];来给someProperty命名的属性赋值.
这种间接访问能让开发者在运行时而非编译时决定访问那个属性, 从而得到更灵活和易于重用的对象.
为了获得这种灵活性, 对象需要用特定的方式来命名方法, 这种命名约定就称为键值编码(KVC).
和其他观察者机制的对比:
相比委托 / Notification, KVO的开销更小, 被观察的对象不需要有任何额外的代码来通知观察者,而如果没有观察者, KVO就没有运行时的消耗. 只有对象被真正观察时, KVO系统才添加通知代码. 这就让KVO在性能上至关重要的场合变得很有吸引力.
objectForKey 和 objectForKeyPath区别
key(键)和keyPath(键路径)之间的区别在于,后者可以包含嵌套关系, 可用点分开.
如下面方法是等价的:
[[self department] name];
[self valueForKeyPath: @“department.name”];
如果valueForKey: @“department.name”会试图获取department.name这个属性. 大部分会抛出异常.
相比较, keyPath会更灵活, 而key版本的稍微快一些. 如果键是通过参数传给, 一般会用valueForKeyPath:来为调用者提供最大的灵活性, 如果键是硬编码(固定的),则选择valueForKey: .
用KVC实现高阶消息传递:
NSArray *array =@[@"abc",@"dcv",@"dpa"];
NSArray *capitalizedArray = [array valueForKey:@"capitalizedString"];
NSArray *capitalizedLengthArray = [array valueForKeyPath:@"capitalizedString.length”];//对array中的每一个元素调用capitalizedString,然后调用length,在吧返回值封装进NSNumber对象.结果被收集进名为capitalizedLengthArray中
NSLog(@"%@ %@", capitalizedArray, capitalizedLengthArray);
打印结果:
2015-02-08 12:31:01.846 KVC[12930:2569897] (
Abc,
Dcv,
Dpa
) (
3,
3,
3
Abc,
Dcv,
Dpa
) (
3,
3,
3
)
容器操作符:(更多查看:key-value Coding Programing Guide)
KVC还提供了很复杂的函数, 比如说自动对一组数字求和或者求平均值。
NSArray *array =@[@"abc",@"dcv",@"dpa"];
NSInteger totalLength = [[arrayvalueForKeyPath:@"@sum.length"]integerValue];
NSInteger totalLength = [[arrayvalueForKeyPath:@"@sum.length"]integerValue];
NSLog(@"totalLength, %ld", totalLength);
打印结果为9
0 0
- iOS开发--KVC & KVO
- iOS开发 - KVO/KVC
- iOS开发:KVO和KVC
- iOS开发之KVC、KVO
- iOS开发 KVC和KVO
- IOS开发 - KVC 和 KVO
- 【iOS开发系列】KVC&KVO
- iOS开发:KVO和KVC
- iOS开发之KVC/KVO
- IOS应用开发-KVC/KVO
- iOS开发笔记6--KVC,KVO,通知
- iOS开发中KVO & KVC的使用
- iOS开发-Day24-OC KVC&KVO&通知
- 12、iOS 开发之 KVC \KVO
- iOS开发之 KVC,KVO简单了解
- iOS开发UI系列之KVC/KVO
- IOS开发 - KVC和KVO的使用
- iOS开发之KVC与KVO
- 【设计模式学习笔记十九】【行为模式】【备忘录模式(Memento)】
- 【设计模式学习笔记二十】【行为模式】【观察者模式(Observer)】
- ACM.vim
- 【设计模式学习笔记二十一】【行为模式】【状态模式(State)】
- 自控力读书笔记:第一章 我要做,我不要,我想要
- iOS开发--KVC & KVO
- Windows Phone 8.1中的Toast通知
- 改进Miller_rabin素数测试
- jQuery extend 命名空间 each 等讲解
- AltiumDesigner14.3.X下载&安装破解教程
- CString,string,char*的转换及综合比较
- Mysql主从备份配置
- 解决Android4.4 webview 图片如何自适应 之前的方法失效问题
- 中国房地产开发商排名百强榜单