KVO的简单用法
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
//KVO是基于KVC的,观察者可以观察一个对象的某个属性(key),但这个属性的值(value)发生变化的时候,会触发一个事件
//KVO中涉及到以下几个概念
//被观察者 通常是 Model
//观察者 通常是 Controller
//key 被观察者的某个属性
//value key对应的值
//设计模式中有一种设计模式 :观察者模式
//KVO是观察者模式的一种实现方式,属于观察者设计模式
//******KVO的使用流程
//1.创建被观察对象
//2.为被观察者指定观察者
//3.实现 回调方法
//4.修改 被观察的属性(会触发 回调方法)
//5.移除观察者
实例:
创建一个Person类 ,Person类有一个name属性
根控制器ViewController.m中代码
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
{
Person *_p;
}
@end @implementation ViewController
-(void)dealloc
{
[_p removeObserver:self forKeyPath:@"name"];
[_p release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad]; //p用作被观察者
_p = [[Person alloc] init]; [_p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"hello"];
_p.name = @"lisi"; // Do any additional setup after loading the view, typically from a nib.
} //被观察者的属性发生变化时,才会触发此方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"object = %@",object);
NSLog(@"keyPath = %@",keyPath);
NSLog(@"change = %@",change);
NSLog(@"context = %@",context);
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
KVO的简单用法的更多相关文章
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
- NSCharacterSet 简单用法
NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串 subst ...
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
- TransactionScope简单用法
记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
随机推荐
- 【STL】-deque的用法
初始化: #include <deque> deque<float> fdeque; 算法: fdeque.push_front(f); fdeque.push_back(f) ...
- Hibernate对象映射类型
Hibernate understands both the Java and JDBC representations of application data. The ability to rea ...
- LepideMigrator for Documents Step by Step
blog: http://blog.csdn.net/foxdave A Manager Marketing Operations invite me to review their product, ...
- UITextView的字数限制 及 添加自定义PlaceHolder
- (void)textViewDidChange:(UITextView *)textView{ NSString *temp=textView.text; //字数超过限制数量时,进行截取替换 i ...
- 有关PHP安装,基础学习
首先要安装 wamp 和 NavicatMySQLFront (要在非中文目录下) 打开DW 点击站点 ——新建站点:设置站点名称,选择本地站点文件夹:wap\www 服务器:添加 + 服务器名 ...
- linux基础命令学习(七)samba服务器配置
samba有五种安全级别,它们分别是: share:不需要samba账户就可登陆samba服务器 user:需要添加samba账户才可以登陆samba服务器 server:由另外一 ...
- 【模块应用】MFRC522开发笔记
一.了解基本概念 ①ISO-14443A协议:( 国际标准化组织:International Organization for Standardization)RFID协议的一种; PICC:临近 ...
- yii2 单页面增删改
视图层 <style>#tab tr td{ height:40px; width:100px;}</style><form action="ind ...
- svn认证失败时的解决
删除用户目录下的.subversion文件夹,这个文件夹记录了密码! rm .subversion/ -rf
- PHP中的正则表达式的使用
PHP中的正则表达式基础知识1.正则表达式就是描述字符串排列模式的一种自定义语法规则2.如果可以使用字符串处理函数完成的任务,就不使用正则表达式3.有一些复杂的操作,只能使用正则表达式完成4.正则表达 ...