面试的时候,这一块,别人鄙视了,回来看看,其实也没有什么嘛,但是,不知道就是不知道,慢慢才能知道。
Key-Value Coding (KVC)
除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性。
定义一个Student类,继承于NSObject。
.h文件
#import <Foundation/Foundation.h> @interface Student : NSObject { NSString *name; } @end
.m文件
#import "Student.h" @implementation Student @end
.m文件也没有实现。name属性没有加property,原来的访问方法就访问不了name属性了。怎么办呢?用kvc就可以了
#import "Student.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *student = [[[Student alloc]init ]autorelease]; [student setValue:@"张三" forKey:@"name"]; NSString *name = [student valueForKey:@"name"]; NSLog(@"学生姓名:%@",name); } return 0; }
打印结果:
2012-07-20 15:04:09.920 objectiveC[1977:403] 学生姓名:张三
张三 这个值存进去了,通过valueForKey取出来了。
Key-Value Observing (KVO)
Key-Value Observing (KVO) 建立在 KVC 之上,它能够观察一个对象的 KVC key path 值的变化。举个例子,用代码观察一个 person 对象的 address 变化,以下是实现的三个方法:
- watchPersonForChangeOfAddress: 实现观察
- observeValueForKeyPath:ofObject:change:context: 在被观察的 key path 的值变化时调用。
- dealloc 停止观察