KVC和OC字典

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

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的海东网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

  1. [dict setObject:<#(id)#> forKey:<#(id<NSCopying>)#>]  

  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]];//<span style="font-family: Arial, Helvetica, sans-serif;">[NSNumber numberWithInt:123] 存放在常量区(堆、栈、常量、寄存器、代码区、全局区)</span>  

  7.   

  8.       

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

  10.     }  

  11.     return 0;  

  12. }  

其输出结果是

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. }  

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

  8.   

  9. @end  

  1. #import "ClassA.h"  

  2.   

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

  4. {  

  5.     @autoreleasepool  

  6.     {  

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

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

  1. <span style="white-space: pre;">  </span>//<span style="font-family: Arial, Helvetica, sans-serif;">[a setValue:[NSNumber numberWithInt:123] forKey:@"y"]; 没有成员变量y,报错</span>  

  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 函数则直接获取成员变量进行更改。

本文题目:KVC和OC字典
文章来源:https://www.cdcxhl.com/article20/iggejo.html

成都网站建设公司_创新互联,为您提供品牌网站制作品牌网站建设网站设计建站公司企业建站网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化