- 浏览: 892524 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
原文:http://gaoyong.diandian.com/post/2012-08-08/40031793795
KVO (Key Value Observing)是ios里面一种特别方便的机制用于“捕捉”对象属性的变化。在概念理解上,是设计模式里面观察者模式的一种实践。
拿一个具体的例子来讲:
有一个数据对象EmployeeData,该对象有一个属性salary
有一个ViewController 用于显示对象EmployeeData的属性salary的值
当salary的值发生变化的时候,ViewController如何显示变化后的新值。
方案一:
“可以在EmployeeData类弱引用ViewController类,然后在EmployeeData数据发生变化时,调
用ViewController类的回调函数。这个方法虽然能达到目的,但是会破坏EmployeeData的完整
性,一个负责数据管理的类,不应当依赖另一个负责视图控制的类;换句话说,EmployeeData
类不应该知道关于ViewController类的任何事情,甚至不需要知道其从在”
方案二:
使用ios提供的消息中心(NSNotificationCenter)。在此EmployeeData为消息生产者,ViewController为消息消费者。当salary数据发生变化时发送一个消息既可。
ViewController接收到salary数据变化的通知做相对应的业务处理。不足之处如同方案一,EmployeeData对象的salary每次变动都需要发送“通知”。这项工作对EmployeeData自身来讲毫无意义。
方案三:
在ViewController中将自身(self)设置为EmployeeData salary属性值变化的观察者。当salary值发生变化时,执行一个回调方法。这样对“EmployeeData”来讲不用关心除自身业务以
外的事情。避免了方案一和方案二的瑕疵。对ViewController来讲关注谁的变化,注册自己为其的观察者既可。间接轻便。
下面是一些核心的代码。
KVO (Key Value Observing)是ios里面一种特别方便的机制用于“捕捉”对象属性的变化。在概念理解上,是设计模式里面观察者模式的一种实践。
拿一个具体的例子来讲:
有一个数据对象EmployeeData,该对象有一个属性salary
有一个ViewController 用于显示对象EmployeeData的属性salary的值
当salary的值发生变化的时候,ViewController如何显示变化后的新值。
方案一:
“可以在EmployeeData类弱引用ViewController类,然后在EmployeeData数据发生变化时,调
用ViewController类的回调函数。这个方法虽然能达到目的,但是会破坏EmployeeData的完整
性,一个负责数据管理的类,不应当依赖另一个负责视图控制的类;换句话说,EmployeeData
类不应该知道关于ViewController类的任何事情,甚至不需要知道其从在”
方案二:
使用ios提供的消息中心(NSNotificationCenter)。在此EmployeeData为消息生产者,ViewController为消息消费者。当salary数据发生变化时发送一个消息既可。
ViewController接收到salary数据变化的通知做相对应的业务处理。不足之处如同方案一,EmployeeData对象的salary每次变动都需要发送“通知”。这项工作对EmployeeData自身来讲毫无意义。
方案三:
在ViewController中将自身(self)设置为EmployeeData salary属性值变化的观察者。当salary值发生变化时,执行一个回调方法。这样对“EmployeeData”来讲不用关心除自身业务以
外的事情。避免了方案一和方案二的瑕疵。对ViewController来讲关注谁的变化,注册自己为其的观察者既可。间接轻便。
下面是一些核心的代码。
// // EmployeeData.h // KVOExample // // Created by gaoyong on 12-8-8. // Copyright (c) 2012年 gaoyong. All rights reserved. // #import <Foundation/Foundation.h> @interface EmployeeData : NSObject { NSString *salary; } @property(nonatomic,retain) NSString *salary; @end // // EmployeeData.m // KVOExample // // Created by gaoyong on 12-8-8. // Copyright (c) 2012年 gaoyong. All rights reserved. // #import "EmployeeData.h" @implementation EmployeeData @synthesize salary; @end // // ViewController.h // KVOExample // // Created by gaoyong on 12-8-8. // Copyright (c) 2012年 gaoyong. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController { UILabel *salary; } @property(nonatomic,retain) IBOutlet UILabel *salary; @end // // ViewController.m // KVOExample // // Created by gaoyong on 12-8-8. // Copyright (c) 2012年 gaoyong. All rights reserved. // #import "ViewController.h" #import "EmployeeData.h" @interface ViewController () { EmployeeData *employeeData; } @end @implementation ViewController @synthesize salary; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. employeeData = [[EmployeeData alloc] init]; [employeeData addObserver:self forKeyPath:@"salary" options:NSKeyValueObservingOptionNew context:nil]; } -(void)viewDidAppear:(BOOL)animated { //employeeData.salary = @"20"; //salary.text = employeeData.salary; employeeData.salary = @"20"; employeeData.salary = @"200"; employeeData.salary = @"2000"; employeeData.salary = @"20000"; employeeData.salary = @"200000"; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"observeValueForKeyPath is run"); // 美妙在这里:这一行会打印5次。 if (object == employeeData && [keyPath isEqualToString:@"salary"]) { self.salary.text = employeeData.salary; } } -(void) dealloc { [employeeData removeObserver:self forKeyPath:@"salary"]; } @end
发表评论
-
生产者和消费者模式
2017-02-28 18:18 555生产者和消费者模式 在并发编程中使用生产者和消费者可以解决绝大 ... -
UIImage变为NSData并进行压缩
2014-05-19 20:23 1890//sdk中提供了方法可以直接调用 UIImage *im ... -
update cocapods
2014-05-17 22:27 780早上更新cocoapod依赖库,发现更新到32.1版本,早先的 ... -
iOS发送短信息代码实例
2014-05-16 18:15 2645#import <MessageUI/Message ... -
DISPATCH TIMER
2014-05-14 16:12 688/* __block void (^callback) ... -
UITextField左边显示图片
2014-05-13 18:08 1121The overlay view displayed on t ... -
iOS调用系统打电话,发短信功能
2014-05-11 15:48 2067先介绍一种最简单的方法: 调用打电话功能 [[UIAppl ... -
iOS面试题
2014-05-09 16:10 10531.写一下UIButton与UITableView的层级结构 ... -
socket二进制报文
2014-05-09 15:18 1269里面有帧头 字符串UTF-8 中间用0隔开 又一个字符串 ... -
将网站添加到桌面的方法
2014-05-08 14:25 1639<link href="http://www. ... -
iPhone通讯录联系人操作大全
2014-05-07 10:29 14201.需要引入AddressBook.framework框架 2 ... -
sqlite获取最新插入的rowid
2014-05-07 09:59 1494除了 last_insert_rowid select max ... -
号码归属地查询,拨打电话
2014-05-06 15:07 808在程序内调用拨打电话的方法,[[UIApplication s ... -
iOS时间合并
2014-04-28 17:55 1041合并同一时间的课程,同一时间可能有多个课程,比如13:30-1 ... -
vCard通讯录格式说明
2014-04-28 16:47 2468原帖:http://freesoftman.iteye.com ... -
UISearchBar背景色全套解决方案
2014-04-25 09:36 7405os系统升级到7.1后,原来在7.0下显示正常的UISearc ... -
升级XCode5.1.1遇到的奇葩问题NSString,NSObjectRuntime.h报错,Foundation找不到
2014-04-24 11:19 869升级XCode5.1.1遇到的奇葩问题NSString,NSO ... -
将NSString转为NSArray
2014-04-22 16:52 6243// Your JSON data: NSString *c ... -
另外一种NSData转为NSString的方法
2014-04-22 15:40 1185If the data is not null-termina ... -
HTTP,Socket,WebSocket异同
2014-04-18 16:54 1809参考文章: http://abbshr.g ...
相关推荐
Notification使用的关键是利用ios的消息中心,发送消息通知,观察者接收到消息通知,执行对应的方法。NSNotificationCenter 较之于 kvo 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。
kvo的ios代码,kvo即创建一个观察者,当观察的对象的属性发生变化时,观察者就会去执行某些相应的事件
利用KVO,当UIButton属性改变时,实现方法 ...(这样的机制听起来类 似Notification,但是notification是需要一个发送notification的对象,一般是 notificationCenter,来通知观察者。而kvo是直接通知到观察对象。)
KVO即:Key-Value Observing, 直译为:基于键值的观察者。 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。 简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者...
本demo主要讲的是IOS内的kvo、kvc的综合应用,许多人有时候分不清kvo/kvc之间的区别,本demo将为你详细区分
1、注册观察者,实施监听。 2、在回调方法中处理属性发生的变化 3、移除观察者
KVC_KVOTest Demo代码 KVC KVO IOS 观察者 Observe
SFObservers, NSNotificationCenter和KVO自动删除观察者 在任何项目中,我不再使用 SFObservers,但仍然会接受请求的请求。命令行目SFObservers是在NSNotificationCenter和KVO中为观察者 Pattern 添加自动删除的类别...
做过 iOS 的同学应该都了解过 KVO,是观察者模式在 ObjectiveC 中的应用。使用 KVO,能很方便的实现对对象属 性的监听,参见探索KVC/KVO的实现原理KVC 一 和 探索KVC/KVO的实现原理KVO 二 虽然 iOS 提供了对...
使用键值观察跟踪单个属性或集合(如数组)的变化非常高效,它只需要在观察者方法中添加代码,不需要修改被观察文件内的代码,这一点和委托、通知不同。但需要注意的是,键值观察(KVO)是建立在键值编码(Key Value...
在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,即便就如iOS开发中与我们打交道最多的无非就是单例模式、观察者模式和工厂模式了,当然了其他的设置模式也同样存在在编程的很多地方。...
KVO (Key Value Observing)是ios里面一种特别方便的机制用于“捕捉”对象属性的变化。在概念理解上,是设计模式里面观察者模式的一种实践。
#谈KVC、KVO(重点观察者模式)机制编程 一不小心,小明在《跟着贝尔去冒险》这个真人秀节目中看到了“一日警察,一世警察”的Laughing哥,整个节目除了贝尔吃牛睾丸都不用刀叉的不雅餐饮文化外,还是镜头少普通...
另一个框架是NotificationCenter,以它实现的跨object通知以及原生的KVO(Key-Value-Observing)是iOS中观察者模式的主要实现手段。本文内容:UserNotifications介绍本地通知(LocalNotifications)远程通知...
KVO:它提供一种机制,当指定的对象的属性被修改后,则 对象就会接受到通知。... 注册,指定被观察者的属性 2. 实现回调方法 3. 移除观察 本资源利用KVO,来实现点击更改价格按钮,更改价格的值。
是广播模式/观察者模式,可以异步查看系统或者自定义一些事件 8.如何调用 UIView 的 drawrect 消息 定制uiview直接用图形画底层控件一般用drawRect:(CGRect)rect; 我用的很少 我一般组合定制控件 9. view 和 ...
观察者:当一个对象通知其他对象任何状态变化时(NSNotificationCenter,KVO)。 备忘录:捕获并外部化对象的内部状态(NSUserDefault,存档)。 命令:将请求或操作封装为对象(NSMethodSignature,NSInvocation)...