KVC 和KVO浅谈
一、KVC:Key-Value -Coding :直译为:键-值-代码;即:对键值进行改变的代码方法
二、KVO:Key-Value - Observe :直译为:键-值-观察;即:对键值对进行监视、观察的方法
KVO主要通过
1、设置观察者
2、观察内容发生变化触发的方法
A.设置将要监视的对象: // StockData.h #import <Foundation/Foundation.h> @interface StockData : NSObject
{
NSString *stockName;
NSString *price; }
@end
// StockData.m
#import "StockData.h" @implementation StockData @end B、编辑主界面
// MainViewController.h
#import <UIKit/UIKit.h> @interface MainViewController : UIViewController @end // MainViewController.m #import "MainViewController.h"
#import "StockData.h" @interface MainViewController () @property(nonatomic,retain)StockData *stockForKVO; @property(nonatomic,retain)UILabel *aLabel; @property(nonatomic,assign)NSInteger number; @end @implementation MainViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. self.number = ; _stockForKVO = [[StockData alloc]init]; [_stockForKVO setValue:@"searph" forKey:@"stockName"]; [_stockForKVO setValue:[NSString stringWithFormat:@"%ld",_number] forKey:@"price"]; [_stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; self.aLabel = [[UILabel alloc]initWithFrame:CGRectMake(, , , )]; self.aLabel.textAlignment = NSTextAlignmentCenter;
self.aLabel.textColor = [UIColor orangeColor];
self.aLabel.text = [_stockForKVO valueForKey:@"price"];
[self.view addSubview:self.aLabel];
// [self.aLabel release]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.backgroundColor = [UIColor whiteColor];
btn.frame = CGRectMake(, , , ); [btn addTarget:self action:@selector(handleDown:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; } - (void)handleDown:(UIButton *)sender{ _number ++; [_stockForKVO setValue:[NSString stringWithFormat:@"%ld",_number] forKey:@"price"]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([keyPath isEqualToString:@"price"]) { self.aLabel.text = [_stockForKVO valueForKey:@"price"]; } } - (void)dealloc{
[super dealloc];
[_stockForKVO removeObserver:self forKeyPath:@"price"];
[_stockForKVO release]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} /*
#pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/ @end
KVC 和KVO浅谈的更多相关文章
- 谈KVC、KVO(重点观察者模式)机制编程
一不小心,小明在<跟着贝尔去冒险>这个真人秀节目中看到了“一日警察,一世警察”的Laughing哥,整个节目除了贝尔吃牛睾丸都不用刀叉的不雅餐饮文化外,还是镜头少普通话跟小明一样烂的Lau ...
- 漫谈 KVC 与 KVO
KVC 与 KVO 无疑是 Cocoa 提供给我们的一个非常强大的特性,使用熟练可以让我们的代码变得非常简洁并且易读.但 KVC 与 KVO 提供的 API 又是比较复杂的,绝对超出我们不经深究之前所 ...
- 浅谈iOS需要掌握的技术点
鉴于很多人的简历中的技术点体现(很多朋友问我iOS需要知道注意哪些)! 技术点: 1.热更新 (及时解决线上问题) 2.runtime(json解析.数据越界.扩大button点击事件.拦截系统方法) ...
- 11. KVC And KVO
1. KVC And KVO 的认识 KVC/KVO是观察者模式的一种实现 KVC全称是Key-value coding,翻译成键值编码.顾名思义,在某种程度上跟map的关系匪浅.它提供了一种使用 ...
- iOS中关于KVC与KVO知识点
iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...
- 聊聊 KVC 和 KVO 的高阶应用
KVC, KVO 作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶 ...
- iOS 自定义转场动画浅谈
代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
随机推荐
- 30 个最棒的 jQuery 的拖放插件
jQuery 允许用户为任意 DOM 元素添加可拖放的功能,通过 jQuery 的拖放插件你可以轻松实现网页上任意元素的拖拽操作.在本文中我们向你推荐 30 个最棒的 jQuery 的拖放插件. 点击 ...
- 不实名认证去除新浪云SEA的实名认证提示的方法
最近在做个人空间,不想搭本地php和数据库,为了省事,在新浪云SEA开了个php应用,挺好用的,现在没什么访问量,基本不收费,特别适合练手. 我的空间是php,由于没有实名验证,每个页面都会出现一个 ...
- Ubuntu安装提示Permission Denied
我用wubi安装ubuntu 显示 permission denied 并要查看日志文件 怎么办啊? 你好,你把你的ISO放到你的Wubi目录下面,也就是把镜像放到你解压好的文件夹里面就可以了呢!! ...
- 1013: [JSOI2008]球形空间产生器sphere
很直观的一个gauss题: 用的是以前用过的一个模板: #include<cstdio> #include<algorithm> #include<cmath> # ...
- 1101-Trees on the Level
描述 Trees are fundamental in many branches of computer science. Current state-of-the art parallel com ...
- MySQL查询表结构的SQL小结
mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; 示例: use testDB; # ...
- HDOJ多校联合第四场
B题: C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|<=15,给定一个整数m,以m为长度且仅含4种字母的字符串T,求LCS(S,T)为0,1,2,3....| ...
- Ci框架整合smarty模板引擎
Ci框架整合smarty模板引擎 备注:下载smarty时,最好选择2.6版本,其他测试有坑,ci可以是2.2或其他 大体思路:将smarty封装成ci框架的一个类,然后重新配置一下smarty,这样 ...
- Oracle查询经典
.检索部门编号.部门名称.部门所在地及其每个部门的员工总数. select d.deptno,d.dname,d.loc,count(*) from emp e,dept d where e.dept ...
- Samba nsswitch/pam_winbind.c文件输入验证漏洞
漏洞名称: Samba nsswitch/pam_winbind.c文件输入验证漏洞 CNNVD编号: CNNVD-201312-047 发布时间: 2013-12-05 更新时间: 2013-12- ...