KVC和KVO的简要介绍
来源:互联网 发布:知乎日报 rss地址 编辑:程序博客网 时间:2024/05/24 02:34
概念:
KVC即NSKeyValueCoding(键值编码),一种可以不通过 Getter或者Setter方式而直接通过对象属性字符串的方式对属性值进行编辑和访问的机制。KVO即NSKeyValueObserving(键值监听),一种当对象的属性值发生变化时,允许当前对象收到通知的机制。
KVC代码示例:
创建了一个person类,在其m文件添加如下变量@interface Person(){ NSString *name; NSNumber *age; Student *student; }@end
其中Student类如下
@interface Student : NSObject{ NSString *schoolNumber;}@end
在控制器中创建并采用kvc的方式对person 对象赋值和取值Person *person = [[Person alloc]init]; //KVC赋值 [person setValue:@"liwei" forKey:@"name"]; [person setValue:@24 forKey:@"age"]; Student *student = [[Student alloc]init]; [student setValue:@"201007020216" forKey:@"schoolNumber"]; [person setValue:student forKey:@"student"]; [person setValue:@"201007020217" forKeyPath:@"student.schoolNumber"]; //KVC取值 NSString *name = [person valueForKey:@"name"]; NSNumber *age = [person valueForKey:@"age"]; NSLog(@"个人信息\n name:%@\n age:%@",name,age); //KVC通过键路径访问 NSString *schoolNumber = [person valueForKeyPath:@"student.schoolNumber"]; NSLog(@"%@",schoolNumber);
KVO代码示例:
#import "Person.h"@interface Person(){ NSString *name; NSNumber *age; Student *student;}@end@implementation Person- (instancetype)init{ self = [super init]; if (self) { [self addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld context:nil]; } return self;}- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ if ([keyPath isEqualToString:@"name"]) { NSString *name1 = [change objectForKey:@"new"]; NSLog(@"更名为:%@",name1); }}- (void)dealloc{ [self removeObserver:self forKeyPath:@"age"];}
注意,在文件中使用了简直监听机制需要在销毁时移除之前注册的监听,否者会抛出异常。
1 0
- KVC和KVO的简要介绍
- iOS KVC和KVO介绍
- KVO/KVC简单的介绍
- KVC和KVO的学习
- KVC和KVO的理解
- oc的kvc和kvo
- KVO和KVC的理解
- KVO和KVC的区别
- KVC 和KVO的使用
- KVC和KVO的使用
- kvc和kvo的区别
- iOS中KVC 和 KVO 简单介绍
- iOS 中KVC、KVO使用和介绍
- iOS KVC 和 KVO 简单介绍
- 介绍iPhone系统的KVC,KVO机制
- KVO/KVC做了简单的介绍
- KVC\KVO介绍
- KVO 和 KVC 的使用和实现
- JVM调优(五)对一个web项目的调优
- inflater参数
- 老博客地址:
- 最强干货 | 流量神器!!
- 您只能在 HTML 输出流中使用 document.write。 如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。
- KVC和KVO的简要介绍
- maven遇到的坑——5
- Socket中send()函数和recv()函数详解
- 秒杀多线程第六篇 经典线程同步 事件Event
- Java中资源关闭的处理方式
- HotSpot的算法实现
- JAVA线程安全之synchronized关键字的正确用法
- MS Office 自动化编程 - 从Word文档中获取文档属性
- iOS钥匙串KeyChain相关参数的说明