博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS之KVC机制(Object-C篇)
阅读量:4576 次
发布时间:2019-06-08

本文共 2310 字,大约阅读时间需要 7 分钟。

开发环境:xcode7

一.KVC概述

  1.KVC是KeyValueCoding的简称,它是一种可以直接通过类属性的名字来作key,再绑定key的值来访问类属性的机制,而不再通过利用@property提供的setter和getter方法来访问;

  2.KVC支持类对象和内建的基本数据类型;

  3.KVC的关键方法定义在NSKeyValueCoding.h文件里,常用的方法:

  修改值:

  - (void)setValue:(nullable id)value forKey:(NSString *)key;

  - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

  获取值:

  - (nullable id)valueForKey:(NSString *)key;

  - (nullable id)valueForKeyPath:(NSString *)keyPath;

二.演示

  1.新建一个工程

  2.新建一个类Person类

Persion.h里为Person类添加姓名和年龄字段,不用@property处理为属性,提供setter和getter方法

#import 
@interface Person : NSObject { NSString *name; int age;}@end

Person.m默认即可,不做任何添加

#import "Person.h"@implementation Person@end

  3.在main.m文件中利用KVC,我们来实现对Person类中name和age实例变量的访问

#import 
#import "Person.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [[Person alloc] init]; [person setValue:@"damon" forKey:@"name"]; [person setValue:@"20" forKey:@"age"]; NSString *name = [person valueForKey:@"name"]; int age = [[person valueForKey:@"age"] intValue]; NSLog(@"name:%@",name); NSLog(@"age:%d",age); } return 0;}

  4.新建Pet类,让Person类拥有一个Pet实例

  Pet.h文件

#import 
@interface Pet : NSObject { NSString *name;}@end

  Pet.m文件默认,不做任何修改

  更新Person.h文件,Person.m文件不做任何修改

#import 
@class Pet;@interface Person : NSObject { NSString *name; int age; Pet *myPet;}@end

  5.在main.m文件中,利用KVC访问myPet的name实例变量

#import 
#import "Person.h"#import "Pet.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [[Person alloc] init]; [person setValue:@"damon" forKey:@"name"]; [person setValue:@"20" forKey:@"age"]; NSString *name = [person valueForKey:@"name"]; int age = [[person valueForKey:@"age"] intValue]; NSLog(@"name:%@",name); NSLog(@"age:%d",age); Pet *pet = [[Pet alloc] init]; [pet setValue:@"旺旺" forKey:@"name"]; [person setValue:pet forKey:@"myPet"]; NSString *myPetName = [person valueForKeyPath:@"myPet.name"]; NSLog(@"myPetName:%@",myPetName); } return 0;}

三.总结

  KVC这种比编码方式使用起来非常简单,结合KVO,很适用于当模型数据发生改变时,引发的UI改变的情况。

 

转载于:https://www.cnblogs.com/damon-sf/p/4844986.html

你可能感兴趣的文章
Cube Stacking(并差集深度+结点个数)
查看>>
AndroidStudio3更改包名失败
查看>>
jq 删除数组中的元素
查看>>
js URL中文传参乱码
查看>>
Leetcode 367. Valid Perfect Square
查看>>
UVALive 3635 Pie(二分法)
查看>>
win系统查看自己电脑IP
查看>>
Backup&recovery备份和还原 mysql
查看>>
一道面试题及扩展
查看>>
Unity 3D 我来了
查看>>
setup elk with docker-compose
查看>>
C++ GUI Qt4学习笔记03
查看>>
Java基础回顾 —反射机制
查看>>
c# 前台js 调用后台代码
查看>>
$.ajax()方法详解
查看>>
jquery操作select(增加,删除,清空)
查看>>
Sublimetext3安装Emmet插件步骤
查看>>
MySQL配置参数
查看>>
全面理解Java内存模型
查看>>
存储过程
查看>>