最近研究了一下子KVC和KVO,KVC:即Key-Value-Coding 而KVO:即Key-Value-Observer

KVC是针对NSObject的子类,因为它的实现是由于其括展类NSObject(NSKeyValueCoding),实现了

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

- (id)valueForKey:(NSString *)key;这两个方法的原因。

还有一个说清楚点就是上面的两个方法不光针对属性,对于类中的对象型变量同样适用。

而KVO也差不多,它是由于NSObject(NSKeyValueObserverRegistration)和NSObject(NSKeyValueObserving)的原因,用它可以实现回调功能下面是我写的,下面的例子我将其融合在一起

#import "BIDViewController.h"
#import "FirstViewController.h"
@interface BIDViewController ()
{FirstViewController* first;}
@end@implementation BIDViewController- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.first=[[FirstViewController alloc] init];//观察FirstViewController中的变量name[first addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (IBAction)clicked:(UIButton *)sender {[self presentViewController:first animated:YES completion:^{}];
}
//如果FirstViewController中的变量name的值变化执行下面
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{if([keyPath isEqualToString:@"name"]){NSLog(@"observer name is %@",[first valueForKey:@"name"]);}
}-(void)dealloc
{[self removeObserver:first forKeyPath:@"name"];[first release];[super dealloc];
}
@end
#import <UIKit/UIKit.h>@interface FirstViewController : UIViewController
{NSString* name;
}
- (IBAction)clicked:(id)sender;
- (IBAction)otherClicked:(id)sender;@end
#import "FirstViewController.h"@interface FirstViewController ()
{
}
@end@implementation FirstViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self;
}- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view from its nib.
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (IBAction)clicked:(id)sender {//当为name设值时会执行BIDViewController中的观察方法,就可进行回调了,不过其范围是比不上真正意义上的回调[self setValue:@"chenliang" forKey:@"name"];//    [self dismissModalViewControllerAnimated:YES];}- (IBAction)otherClicked:(id)sender {NSLog(@"firstVC name is %@",[self valueForKey:@"name"]);
}
@end

好了就说这么多有什么问题请多多指教

ios中的KVC和KVO相关推荐

  1. Objective-C中的KVC与KVO(上)

    本文转载 李朴之先生博客 http://blog.csdn.net/pucker/article/details/7413280 Objective-C中的KVC与KVO是两种比较重要的技术,这里简要 ...

  2. iOS 中KVC、KVO、NSNotification、delegate 总结及区别

    iOS 中KVC.KVO.NSNotification.delegate 总结及区别 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属 ...

  3. ios 通过kvc修改属性会触发kvo_iOS开发-KVC和KVO的理解

    KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是 ...

  4. 【iOS】—— KVC与KVO

    KVC与KVO 一.KVC 1.简单介绍 2.常见的API 3.key和keyPath的区别 4.KVC原理 4.1 `setValue:forKey: `的原理(KVC赋值原理) 4.2 `valu ...

  5. 【iOS】KVC 与 KVO

    一.KVC与KVO *"KVC":key value Coding(键值编码) *目的:间接的修改或获取对象的属性,降低程序(类与类)之间的耦合度. *"KVO" ...

  6. iOS KVC和KVO

    一. KVC KVC也就是key-value-coding,即键值编码,最常见的两种用法就是: 1). 对私有变量进行赋值,同样的也可以通过它进行取值 对某一个属性进行赋值,可以不用加下划线,它的查找 ...

  7. apple开发者文档关于KVC和KVO文档的一些渣翻——这里是原地址

    apple开发者文档关于KVC和KVO文档的一些渣翻--这里是原地址 Key-Value Coding Programming Guide KVC编程介绍 介绍 本文档用来描述NSKeyValueCo ...

  8. [iOS开发]iOS中的Hash

    文章目录 前言 关联对象的底层原理 weak的实现原理 KVO的实现原理 iOS App签名的原理 对象引用计数存储的位置 Runloop与线程的存储关系 NSDictionary的原理 哈希表 哈希 ...

  9. 谈KVC、KVO(重点观察者模式)机制编程

    一不小心,小明在<跟着贝尔去冒险>这个真人秀节目中看到了"一日警察,一世警察"的Laughing哥,整个节目除了贝尔吃牛睾丸都不用刀叉的不雅餐饮文化外,还是镜头少普通话 ...

最新文章

  1. js双等号探索(一): [] == ![]为Ture ?
  2. 阿里巴巴的五大平台野心,让“连接”论成为过去式
  3. neo4j python 算法_图论与图学习(二):图算法
  4. TQ210——TFTP裸板程序下载
  5. java.util.function.Function的用法
  6. java数据同步处理_[java数据库同步解决方案]系统间通讯实现数据信息实时同步解决方案...
  7. 实习踩坑之路:快速失败:使用stream流便利集合的时候删除了对象,导致抛错Null
  8. thinkphp实现文件上传
  9. 181015扇贝有道词霸每日一句
  10. 什么是敏感信息检测,敏感信息检测,安全视图 | 云效
  11. Java指导书练习题——抽象类
  12. 小米3 SIM 卡无法识别
  13. word 怎么删除多余的空白页
  14. TreeView详解
  15. supervisor reload报错及恢复方法
  16. 谷雨主题的微信公众号图文排版有哪些技巧?
  17. 网络编程和网络应用开发
  18. reading : Mask R-CNN(Kaiming He Georgia Gkioxari Piotr Dolla ́r Ross Girshick Facebook AI Research)
  19. 基于JAVA-英杰学堂网上教学平台-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  20. vps实现私人代码托管并用nginx部署hexo

热门文章

  1. mysql分组查询学生平均年龄_那些年我们一起做过的[分组查询]_MySQL
  2. 安卓xml文件中设置动画匀速旋转无效?
  3. Oracle读书列表
  4. 自学编程系列——4 Numpy数组
  5. python 利用requests库抓取网站图片
  6. 元宇宙正在模糊 “虚拟” 和 “现实” 之间的界限
  7. LincSNP:lncRNA相关SNP位点数据库
  8. 图形界面介绍Create Pin Blockage
  9. 查看网卡ip linux,教你如何查看本机ip地址?
  10. python数字金额转换为中文大写金额(角、分)