Objective-C学习笔记第十六章键/值编码

第十六章键/值编码
在这一章来学习Cocoa提供的另一种间接机制,这种机制不属于Objective-C语言的特性,是一种不同于面向对象编程间接机制的间接机制
这种间接机制包括:直接调用对象的方法、属性的点表示法或设置实例变量来直接更改对象状态
                  键/值编码(KVC),间接更改对象状态的方式,实现方法是使用字符串
                  描述要更改的对象状态部分
二、KVC简介
键/值编码中的基本方法包括-valueForKey:和-setValue:forKey:,以字符串的形式向对象发送消息
valueForKey:首先查找以键-key或-isKey命名的getter方法
             如果不存在getter方法,它将在对象内部查找名为_key或key的实例变量
             如果没有通过@synthesize提供存取方法,valueForKey将会查找实例变量{_字符串值}和{字符串
             值}。这一点非常重要-valueForKey在Objective-C运行时使用元数据打开对象并进入其中查找需
             要的信息,在C和C++中不能执行这种操作,通过KVC可以获取不存在getter方法的对象值,无需
             通过对象指针直接访问实例变量
setValueForKey:使用它时它自动将标量值(int、float、struct)放入NSNumber或NSValue中
               它也能自动将标量从这些对象中取出,KVC具有自动包装功能,常规方法调
               用和属性语法不具备
Tip:水果公司以下划线开头的实行保存实例变量,请不要在其他地方使用下划线开头
三、路径
键/值编码还支持指定键路径
-valueForKeyPath和-setValueForKeyPath方法访问键路径
键路径深度是任意的,其形态更像是xml中调用子节点
四、整体操作
在KVC中向NSArray请求一个键值,它它实际上会查询数组中每个对象来查找这个键值,然后将查询结果打包到另一个数组中并返回给你。这种方法也适用于通过键路径访问的对象内部的数组
valueForKeyPath:将路径分解并从做向右进行处理
                不能再键路径中为这些数组添加索引
键/路径还可以引用运算符进行运算,例如获取一组值的平均值或返回这组值的最小值和最大值
举例代码:

NSNumber *count;

count = [garage valueForKeyPath: @"cars.@count"];

NSLog (@"We have %@ cars", count);

cars.@count 之中:cars用于获取cars属性,他是来自garage的NSArray类型的值(其实他是NSMutableArray,
                                    但如果不更改内容,可将其视为NSArray)
               @count,其中的@符号意味着后面进行一些运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值