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

时间: 2024-08-09 06:25:13

KVC 和 OC字典的相关文章

OC 字典 集合

用字典能有什么好处? 字典是个大容器,它能够储存多个数据 用字典存储的数据具有一一对应的关系(使用key来标识value) 字典中一对键值对(key-value)叫做字典中的一个元素,也叫一个条目,只要是对象就可以,不限制类型 字典是无序的 字典中的key是唯一的,一个key只能对应一个value,一个value可以对应多个key 创建字典对象: 1.便利构造器(+号方法): NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKe

OC字典练习 -- 中国省市区

// //  main.m //  oc06  -- 省市区字典 // //  Created by dllo on 15/7/22. //  Copyright (c) 2015年 Gaozi. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { //准备工作 NSString *path = @"/Users/dllo/Desktop

KVC简单介绍 -字典转模型,模型转字典

// 以下两个方法,都属于 KVC 的方法 // KVC 是 cocoa 的大招!间接给对象属性设置数值 // 程序执行过程中,动态给对象属性设置数值,不关心 .h 中是如何定义的 //      只要对象有属性(无论是在.h中还是在.m中定义的属性),就能够读取/设置! //      这种方式,有点违背程序的开发原则! // 字典转模型 setValuesForKeysWithDictionary // 模型转字典 dictionaryWithValuesForKeys //假设self.p

OC ---- 字典集合 iOS学习-----细碎知识点总结

实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:@"悟空", @"name", @"男", @"gender", @"500", @"age", nil ]; NSLog(@"%@", wukong); // 便利构造器创建 NSDictionary *wuNeng

oc字典放入到数组里,根据字典里的属性排序(重点)

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSDictionary *[email protected]{@"name":@"小阳", @"class":@"IOS8", @"age":@"20" }; NSDictionary

oc字典

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *num=[NSNumber numberWithInt:100]; NSDictionary *dic=[NSDictionary dictionaryWithObject:num  forKey:@"money"]; NSDictionary *dics=[NSDi

OC字典存入数组,输出数组中数据,并且删除小明一项,然后进行排序、现根据班级排序,班级相同的用年龄进行排序

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSDictionary *[email protected]{@"name":@"小阳", @"class":@"IOS8", @"age":@"20" }; NSDictionary

OC:字典转模型

1 新建一个NSObject的类作为模型类: #import <Foundation/Foundation.h> @interface VSQuestion : NSObject @property (nonatomic,copy)NSString *answer; @property (nonatomic,copy)NSString *icon; @property (nonatomic,copy)NSString *title; @property (nonatomic,strong)NS

OC 字典 存储联系人信息 求大神优化代码

1.定义联系?人类Contact.实例变量:姓名(拼?音,?首字?母?大写).性别.电话号码. 住址.分组名称.年龄.?方法:?自定义初始化?方法(姓名.电话号码).显?示联系?人信息? 2.在main.m中定义字典,分组管理所有联系?人.分组名为26个?大写的英?文字?母. ? 3.可以添加联系?人对象,如果姓名或电话号码为空,添加失败.添加联系?人到匹配的分 组.? 4.获取某个分组名称下所有联系?人,并且按照姓名升序排列.? 5.从通讯录中根据电话号码搜索联系?人.? 6.获取所有?女性的