键值编码KVC
来源:互联网 发布:js中split的用法 编辑:程序博客网 时间:2024/05/21 15:40
KVC编码由NSKeyValueCoding协议提供,
有两个方法:
【1】 为指定的属性设置值: setValue:属性值 forKey:属性名
该方法的底层执行机制:
(1)程序优先考虑setter方法实现属性赋值。
(2)如果程序中不存在该方法,则KVC机制将会搜索类名_****(如:_name)类型的成员变量,无论该变量在什么位置,KVC底层的代码实际上都是为它赋值。
(3)如果以上两种情况都没有,那么底层代码就会直接对成员变量赋值,(如:name);
(4)如果以上情况都不满足,则会执行对象的setValue:forUndefinedKey:方法,引发异常调用。
如果属性名不存在,则会报错,程序引发“NSUnknownKeyException”异常,会是程序异常结束,如果不想使程序结束,可以重写setVal:forUndefinedKey:方法。
【2】获取指定属性的值:valueForKey:属性名
该方法的底层执行机制:
与上述方法的属性获取类似。
注意:引发该对象的异常调用方法是:valueforUndefinedKey:方法。
简单测试:
FKUser.h
#import <Foundation/Foundation.h>
@interface FKUser : NSObject
{
NSString* name;
NSString* pass;
NSString* birth;
}
@property (nonatomic,copy)NSString* name;
@property (nonatomic,copy)NSString* pass;
@property (nonatomic,copy)NSString* birth;
@end
FKUser.m
#import "FKUser.h"
@implementation FKUser
@synthesize name;
@synthesize pass;
@synthesize birth;
@end
main.m
#import <Foundation/Foundation.h>
#import "FKUser.h"
int main (int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
FKUser* user = [[FKUser alloc] init];
[user setValue:@"nanyang " forKey:@"name"];
[user setValue:@"1234" forKey:@"pass"];
[user setValue:@"12-09" forKey:@"birth"];
NSLog(@"name is %@ ",[user valueForKey:@"name"]);
NSLog(@"pass is %@ ",[user valueForKey:@"pass"]);
NSLog(@"birth is %@ ",[user valueForKey:@"birth"]);
}
return 0;
}
- OC-KVC-键值编码
- KVC-键值编码
- 键值编码KVC
- 019.KVC 键值编码
- 键值编码KVC
- 019.KVC 键值编码
- Oc KVC 键值编码
- KVC键值编码
- iOS KVC 键值编码
- 键值编码-KVC
- OC 键值编码 KVC
- 键值编码(KVC)-简单的KVC
- KVC(键值编码)详解
- IOS KVC(键值编码)模式
- objective-c中的:KVC-键值编码
- 初识Objecive-C 之 键值编码(KVC)
- obj-c编程16:键值编码(KVC)
- 键值编码(KVC)KEY VALUE CODING
- 我为什么要学习Linux?
- 将01矩阵转化为bitmap文件
- 5-14 数据结构啊poi Q.购票
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 微软将会在它的搜索结果中推送移动端友好的网站
- 键值编码KVC
- k-means java实现
- 怎样花两年时间去面试一个人
- 关于虚拟机xp系统上不了网的问题
- 高效Linux bash快捷键及alias总结
- make : arm-none-linux-gnueabi-gcc 未找到
- 2015年新媒时代广告公司最新报价表qq:2900965535
- linux高端内存页框管理:永久内核映射、临时内核映射以及非连续内存分配
- 关于android全屏的设置