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


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

相关文章推荐

KVC基础(Key-Value Coding Fundamentals)

KVC基础 本文描述KVC的基本原则。 Key和key路径 Key是用来标示对象特定属性的字符串。通常,一个key对应一个访问器方法或接收对象的实例变量。Key必须使用ASCII编码,以小写字母...

KVC编程指南(Key-Value Coding Programming Guide)

概述 重要:这只是开发中API或技术的一个初步文档。苹果提供这些信息来帮助你在苹果产品上采用这些技术和编程界面。这些信息可能发生变化,根据这个文档实现的软件必须在最终的操作系统软件和最终的文档上测试。...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Objective-c key-value coding programming

全称: Key Value Observing 在ios里,可以添加观察者模式,来实现某个property更改后,通知指定的类。 然后到observeValueForKeyPath:ofObjec...

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

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

iOS 【IOS中Key-Value Coding (KVC)的使用详解】

KVC,键值编码,是一个非正式的协议,它提供一种机制来间接访问对象的属性。直接访问对象是通过调用访问器的方法实现,而kvc不需要调用访问器的设置和获取方法,可以直接访问对象的属性。   下面介绍一下...

cocoa's Key-value coding

Key-value coding(KVC)机制允许set(设置)和get(获取)变量值。这里的变量名可能是一个字符串,也就是Key。例如,类Company拥有一个类型为NSString,叫做compa...
  • vrix
  • vrix
  • 2011-10-22 22:48
  • 723

KVC(key value coding)的使用

除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性。 下图来自苹果官网: 如何使用KVC存取对象属性呢?...

Key-Value Coding

Key-Value Coding介绍Key-Value Coding简称KVC,中文名为键值编码。它是一种利用字符串间接访问对象属性的方法。而这个字符串便就是键。访问器,即setter和getter,...

Brief Intro to Key Value Coding

这章是简略介绍KVC的Advantage和简单用法;确实不错,简单易懂,配合前一篇的定义,面试回答更有底气啦 ^ ^ “What’s the advantage of using KVC to acc...

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

Cocoa derives the name of an accessor from a string name at runtime through a mechanism called key–v...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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