Key-Value Coding

原创 2016年05月30日 23:55:56

 1.简介

 KVC:Key-Value Coding,直译是:键值编码。简单来讲,就是给属性设置值的 比如说如下的第一行KVC的代码,其实和第二行的普通代码是等效的:

           UITableViewController *vc = [segue destinationViewController];
         kvc:   [vc setValue:self.textField.text  forKey:@"startTime"];
                   vc.startTime = self.textField.text;
 KVC的代码会编译成这样:
       SEL sel = sel_get_uid ("setValue:forKey:");
       IMP method = objc_msg_lookup (myClass->isa,sel);
       method(site, sel, self.textField.text, @"startTime");

KVC内部的实现实际上是这样的:一个对象在调用setValue的时候:
a.  首先根据方法名找到运行方法的时候所需要的环境参数。
b.  它会从自己isa指针结合环境参数,找到具体的方法实现的接口。
c.  再直接查找得来的具体的方法实现。

2.demo示例:

//  KVCTableViewCell.h
//  KVC
//
//  Created by tinghou on 16/5/30.
//
//

#import <UIKit/UIKit.h>

@interface KVCTableViewCell : UITableViewCell

- (id)initWithReuseIdentifier:(NSString*)identifier;

// Object to display.
@property (nonatomic, readwrite, strong) id object;

// Name of property of object to display
@property (nonatomic, readwrite, copy) NSString *property;
@end

//
//  KVCTableViewCell.m
//  KVC
//
//  Created by tinghou on 16/5/30.
//
#import "KVCTableViewCell.h"

@implementation KVCTableViewCell

- (BOOL)isReady {
  
  return (self.object && [self.property length] > 0);
}

- (void)update {
  NSString *text;
  if (self.isReady) {
    
    id value = [self.object valueForKeyPath:self.property];
    text = [value description];
  }
  else {
    text = @"";
  }
  self.textLabel.text = text;
}

- (id)initWithReuseIdentifier:(NSString *)identifier {
  return [self initWithStyle:UITableViewCellStyleDefault
             reuseIdentifier:identifier];
}

- (void)setObject:(id)anObject {
  _object = anObject;
  [self update];
}

- (void)setProperty:(NSString *)aProperty {
  _property = aProperty;
  [self update];
}
@end

//
//  KVCTableViewController.m
//  KVC
//
//  Created by tinghou on 16/5/30.
//
                          
#import "KVCTableViewController.h"
#import "KVCTableViewCell.h"

@implementation KVCTableViewController

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
  return 100;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  
  static NSString *CellIdentifier = @"KVCTableViewCell";
  
  KVCTableViewCell *cell = [tableView
             dequeueReusableCellWithIdentifier:CellIdentifier];
  
  if (cell == nil) {
    cell = [[KVCTableViewCell alloc]
            initWithReuseIdentifier:CellIdentifier];
   
    cell.property = @"intValue";
  }
  
  
  cell.object = @(indexPath.row);
  
  return cell;
}

@end


版权声明:本文为博主原创文章,未经博主允许不得转载。

Key–Value Coding (KVC 目前看到的最好的解释版本)

Cocoa derives the name of an accessor from a string name at runtime through a mechanism called key–v...
  • chuanyituoku
  • chuanyituoku
  • 2013年11月05日 23:19
  • 1448

IOS深入学习(21)之Key-value coding

1 前言     本节我们主要介绍键值编码,以及如何使一个类符合KVC编码 2 详述     键-值编码是一个对于简介访问一个对象属性和关系使用字符标识的机制。它支持或者关系几个特别的Cocoa编程机...
  • u010013695
  • u010013695
  • 2013年10月17日 19:23
  • 2508

把自动机用作 Key-Value 存储

以前只有代码,最近简单写了一点文档: google code 上的链接(总是最新) 自动机是什么DFA 的最小化将 DFA 用做字典 无环DFA (ADFA, Acyclic DFA) 编译...
  • whinah
  • whinah
  • 2013年08月15日 11:51
  • 6430

Git上传代码到coding.net

coding.net是一个代码托管和项目管理的平台,相当于国外的Github。使用了一段时间,感觉挺方便的,使用起来比Github还要简单点。 git的下载和安装就且不介绍了,百度一下,window...
  • gui66497
  • gui66497
  • 2016年04月14日 22:45
  • 4925

Key-value数据库

Key-value数据库是一种以键值对存储数据的一种数据库,类似java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。Key-value数据库代表的有redis。Red...
  • a18826408828
  • a18826408828
  • 2014年11月05日 23:06
  • 5591

使用Github和Coding同时部署Hexo做博客

今天上blog,发现连不上,使用科学上网发后,发现能够连接上,ping了一下域名,发现dns解析正确,很明显是github不知道为啥被ban了。所以网上搜索了一下解决方法,找到了一个使用Coding平...
  • dengnanyi
  • dengnanyi
  • 2017年01月02日 00:12
  • 1785

大数据时代的 9 大Key-Value存储数据库

在过去的十年中,计算世界已经改变。现在不仅在大公司,甚至一些小公司也积累了 TB 量级的数据。各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限。        ...
  • elf8848
  • elf8848
  • 2014年10月09日 10:57
  • 1607

hexo+coding搭建博客

想自己搞一个网站写自己独立的博客,就趁着周末就开始做了,本来以前用github搞了一个,但是无奈速度太慢,这次听学长说可以把网站挂在coding上,速度会快许多。博客初始化然后就开始做了,先在codi...
  • sufubo
  • sufubo
  • 2016年08月27日 21:46
  • 1334

key-value 多线程服务器的Linux C++实现

项目需求 总体思路 网络通信 字符解析 数据存储与查询 1 存储管理 2 数据查询 多线程 待改进 GitHub源码项目需求 设计一个基于Socket或基于HTTP的服务器,服务内容是提供一种简单...
  • quzhongxin
  • quzhongxin
  • 2015年07月17日 15:09
  • 1472

hexo博客同时部署至github和Coding

前段时间搭建了hexo 博客,并将其部署至github。页面地址为cyang812.github.io,链接在此搭建教程在这:hexo搭建教程当时只是将博客部署至github,后来发现有时候上gith...
  • u011303443
  • u011303443
  • 2016年05月26日 22:29
  • 3598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Key-Value Coding
举报原因:
原因补充:

(最多只允许输入30个字)