KVC和OC字典-创新互联

KVC(键值编码)和OC 字典很相似,都是键值存储。但是OC 字典比较灵活,它是一种映射。

专注于为中小企业提供成都网站设计、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业六盘水免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
  1. [dict setObject:<#(id)#> forKey:<#(id)#>]

  1. int main(int argc, const charchar * argv[])

  2. {

  3.     @autoreleasepool

  4.     {

  5.         NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];

  6.         [dict setObject: @"1a23" forKey:[NSNumber numberWithInt:123]];//[NSNumber numberWithInt:123] 存放在常量区(堆、栈、常量、寄存器、代码区、全局区)

  7.         NSLog(@"y:%@",[dict objectForKey:[NSNumber numberWithInt:123]]);

  8.     }

  9.     return 0;

  10. }

其输出结果是

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的成员变量。否则报错。

  1. @interface ClassA : NSObject

  2. {

  3.     @private

  4.     NSNumber* _x;

  5. }

  6. @property(nonatomic,retain,readonly) NSNumber* x;

  7. @end

  1. #import "ClassA.h"

  2. int main(int argc, const charchar * argv[])

  3. {

  4.     @autoreleasepool

  5.     {

  6.         ClassA *a=[[ClassA alloc] init];

  7.         [a setValue:[NSNumber numberWithInt:123] forKey:@"x"];

  1.   //[a setValue:[NSNumber numberWithInt:123] forKey:@"y"]; 没有成员变量y,报错

  1.     NSLog(@"x:%@",[a valueForKey:@"x"]);

  2. }

  3. return 0;

输出为

2015-01-30 11:00:37.687 Test[12583:303] x:123

可以看出即使是私有成员变量,即使没有setter函数,也是可以设置和改变的。新航道培训

KVC可以会优先通过setter和getter函数进行更改。如果没有setter 和getter 函数则直接获取成员变量进行更改。


另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:KVC和OC字典-创新互联
链接URL:http://pwwzsj.com/article/eochs.html