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 的 ...
随机推荐
- 对于数组使用sizeof(a)和使用sizeof(a[0])
#include "stdafx.h" #include <iostream> using namespace std; int main() { ]={}; cout ...
- Fast UI Draw (Intel出品)
Fast UI Draw in a library that provides a higher performance Canvas interface. It is designed so tha ...
- 文件过滤驱动实现目录重定向(一)good
文件过滤驱动拦截的IRP主要包括以下几个:IRP_MJ_CREATE,文件创建操作,文件的任何操作,都是从这里开始的.IRP_MJ_CLEANUP,文件的HANDLE句柄全部关闭会触发这个消息IRP_ ...
- Android:WebView深入使用
webView = (WebView) findViewById(R.id.info_detail_webview); WebSettings webSettings = webView.getSet ...
- java web路径的问题
对于<form action="/xx"> 和 <a href='/xx'> 其中,xx相应的为网站根目录 一般网站为虚拟目录,所以要 写成 /web应 ...
- hdu4655Cut Pieces
http://acm.hdu.edu.cn/showproblem.php?pid=4655 先以最大的来算为 N*所有的排列数 再减掉重复的 重复的计算方法:取相邻的两个数的最小值再与它前面的组合 ...
- BZOJ_1619_[Usaco2008_Nov]_Guarding_the_Farm_保卫牧场_(模拟+bfs)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1619 给出一张图每个点的高度,在一个点上安排守卫可以监视周围所有不高于于当前点的点.也就是类似 ...
- C#使用Word中的内置对话框实例
本文实例讲述了C#使用Word中的内置对话框的方法,分享给大家供大家参考.具体实现方法如下: 使用 Microsoft Office Word 时,有时需要显示用户输入对话框.虽然可以创建自己的对话框 ...
- FZU 2233 ~APTX4869 贪心+并查集
分析:http://blog.csdn.net/chenzhenyu123456/article/details/51308460 #include <cstdio> #include & ...
- [Irving]Sql Server 日期、时间、比较
在sql 的数据库表里时间字段是比较全的格式:例如GetdataTime字段:2007-06-05 12:34:50. 但在前台程序里,利用日历控件,可能查询的时候是以某天来做比较,例如开始时间:20 ...