KVC 和 OC字典
KVC(键值编码)和OC 字典很相似,都是键值存储。但是OC 字典比较灵活,它是一种映射。
[dict setObject:<#(id)#> forKey:<#(id<NSCopying>)#>]
int main(int argc, const char * argv[])
{
@autoreleasepool
{
NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
[dict setObject: @"1a23" forKey:[NSNumber numberWithInt:123]];//<span style="font-family: Arial, Helvetica, sans-serif;">[NSNumber numberWithInt:123] 存放在常量区(堆、栈、常量、寄存器、代码区、全局区)</span> 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 char * argv[])
{
@autoreleasepool
{
ClassA *a=[[ClassA alloc] init];
[a setValue:[NSNumber numberWithInt:123] forKey:@"x"];
<span style="white-space: pre;"> </span>//<span style="font-family: Arial, Helvetica, sans-serif;">[a setValue:[NSNumber numberWithInt:123] forKey:@"y"]; 没有成员变量y,报错</span>
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 函数则直接获取成员变量进行更改。
KVC 和 OC字典的更多相关文章
- OC字典的使用
在OC中,字符串.数组.字典是最常见的对象类型,但是在这三个当中,字典的用法相对较少,因为字典的属性和方法比较少,但是一个字典的用法比较复杂,因为在一个字典当中,既可以包含字符串,也可以包含数组,数组 ...
- OC ---- 字典集合 iOS学习-----细碎知识点总结
实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:", @"age" ...
- oc字典放入到数组里,根据字典里的属性排序(重点)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- oc字典
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- 42 (OC)* 字典实现原理--哈希原理
一.NSDictionary使用原理 1.NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率. - (void ...
- OC 字典dictionaryWithObjectsAndKeys报错
字典dictionaryWithObjectsAndKeys crash,也没有控制台打印输出: 解决方案!! 1.检查dictionaryWithObjectsAndKeys中的object key ...
- iOS - OC - 字典快速遍历
1. [dic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop ...
- 利用runTime,实现以模型为主的字典转模型(注意与KVC的区别)
将字典转化为模型,面向模型开发,是在开发中最为常用的功能.利用KVC可以将字典转换为模型,但是前提有三个约束,一个是必须保证模型的属性个数大于等于字典个数,二是属性名称与字典的key必须相同,三是对于 ...
- OC学习篇之---KVC和KVO操作
前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一 ...
随机推荐
- POJ ---2531
Network Saboteur Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8751 Accepted: 4070 ...
- [辅助类]NHibernateHelper
对于学习ORM的人来说,NHibernate简直就是福音啊,而且此中技术是相当成熟,在这里分享一个小东西 public class NHibernateHelper { //数据库连接字符串 publ ...
- Ubuntu配置Android编译环境
1.Ubuntu安装 VMware安装ubuntu之后,安装Vmware tools: 1.安装完ubuntu后,VMware Workstation菜单:虚拟机-->安装 Vmware Too ...
- WPF开源UI框架推荐 Modern UI
稍后追加,详细教程 http://mui.codeplex.com/
- 进军es6(2)---解构赋值
本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...
- ARM学习笔记6——程序状态寄存器访问指令
这两条指令结合,可用于对CPSR或SPSR进行读/写操作. 当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传递到通用寄存器中 1.MRS指令(Move to Register ...
- Unity3d shader之SWAP Force Depth-of-Field Shader
由于博主常年逃课,所以期末考试期间只能突击,但偶尔还能拿个奖学金啥的,哈哈,所以近一个月没有做游戏,也没有发博客= =... 这个景深的方法很简单 我们需要求的是CoC(circle of confu ...
- R-note1
R 新手 如果你在R上遇到困难,那么你从这两个地方可以得到解答: http://www.r-project.org/mail.html http://stackoverflow.com/questio ...
- poj 2406 Power Strings【最小循环节】
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 36926 Accepted: 15254 D ...
- Verilog HDL模块的结构
一个设计是由一个个模块(module)构成的.一个模块的设计如下: 1.模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字 ...