重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
KVC(键值编码)和OC 字典很相似,都是键值存储。但是OC 字典比较灵活,它是一种映射。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的海东网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
[dict setObject:<#(id)#> forKey:<#(id
int main(int argc, const charchar * argv[])
{
@autoreleasepool
{
NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
[dict setObject: @"1a23" forKey:[NSNumber numberWithInt:123]];//[NSNumber numberWithInt:123] 存放在常量区(堆、栈、常量、寄存器、代码区、全局区)
NSLog(@"y:%@",[dict objectForKey:[NSNumber numberWithInt:123]]);
}
return 0;
}
其输出结果是
2015-01-30 10:40:15.677 Test[12481:303] y:1a23
KVC则是不需要是字典对象调用,他来自是NSObject的分类。@interface NSObject(NSKeyValueCoding)
KVC的好处是,加入ClassA中的某个非public成员变量没有设置getter方法或者setter方法。但是作为使用者我们必须要获取或改变这个成员变量时可以使用KVC。但是前提是我们这个key 必须是ClassA的成员变量。否则报错。
@interface ClassA : NSObject
{
@private
NSNumber* _x;
}
@property(nonatomic,retain,readonly) NSNumber* x;
@end
#import "ClassA.h"
int main(int argc, const charchar * argv[])
{
@autoreleasepool
{
ClassA *a=[[ClassA alloc] init];
[a setValue:[NSNumber numberWithInt:123] forKey:@"x"];
//[a setValue:[NSNumber numberWithInt:123] forKey:@"y"]; 没有成员变量y,报错
NSLog(@"x:%@",[a valueForKey:@"x"]);
}
return 0;
输出为
2015-01-30 11:00:37.687 Test[12583:303] x:123
可以看出即使是私有成员变量,即使没有setter函数,也是可以设置和改变的。新航道培训
KVC可以会优先通过setter和getter函数进行更改。如果没有setter 和getter 函数则直接获取成员变量进行更改。