KVC 和KVO浅谈
来源:互联网 发布:灰鸽子软件官网 编辑:程序博客网 时间:2024/05/11 23:47
一、KVC:Key-Value -Coding :直译为:键-值-代码;即:对键值进行改变的代码方法
该方法是OC(Object-C)为我们提供的一个不通黄色别墅http://www.326dy.com/过初始化方法而直接改变对象实例变量值的一种非正式Protocol的关键方法之一;
通过 [object setValue : value forKey : key];对该对象的对应的实例变量进326电影网http://www.326dy.com/行赋值操作,省略了初试化步奏,使用得当可以大大省略代码量;
二、KVO:Key-Value - Observe :直译为:键-值-观察;即:对键值对进行监视、观察的方法
该方法同样是OC(Object-C)为我们提供的一个不通过初始化方法而直接改变对象实例变量值的一种非正式Protocol的关键方法之一;
KVO和KVC同为基础框架类方法,是以后开发,扩展所性喜剧http://www.326ys.com/需要的基础;
KVO主要通过
1、设置观察者
[object addObserver: observer forKeyPath:key options:options context:context];
其中
第一个参数:observer:观察者,即担任观察者的对象。一般设为工程所在界面本身。
第二个参数:key:键的路径:即具体要监视的key所对应value的值
第三个参数:options:选项,预留参数,一般设置为0;
第四个参数:context:上下文:一般设置为Null;
2、观察内容发生变化触发的方法
- (void)observeValueForKeyPath:(NSString * )keyPath ofObject:( id )object change:(NSDictionary * )change context:(void * )context{};
当所监视key的value发生变化时,自动触发该方法;
3、注意编码结束后应该先移去观察者然后,才能释放观察者对象所有权;
三、代码演示:(该代码在MRC环境下编辑)
1 A.设置将要监视的对象: 2 3 // StockData.h 4 5 #import <Foundation/Foundation.h> 6 7 @interface StockData : NSObject 8 { 9 NSString *stockName; 10 NSString *price; 11 12 } 13 @end 14 // StockData.m 15 #import "StockData.h" 16 17 @implementation StockData 18 19 @end 20 21 22 B、编辑主界面 23 // MainViewController.h 24 #import <UIKit/UIKit.h> 25 26 @interface MainViewController : UIViewController 27 28 @end 29 30 // MainViewController.m 31 32 #import "MainViewController.h" 33 #import "StockData.h" 34 35 36 @interface MainViewController () 37 38 @property(nonatomic,retain)StockData *stockForKVO; 39 40 @property(nonatomic,retain)UILabel *aLabel; 41 42 @property(nonatomic,assign)NSInteger number; 43 44 @end 45 46 @implementation MainViewController 47 48 - (void)viewDidLoad { 49 [super viewDidLoad]; 50 // Do any additional setup after loading the view. 51 52 self.number = 0; 53 54 _stockForKVO = [[StockData alloc]init]; 55 56 [_stockForKVO setValue:@"searph" forKey:@"stockName"]; 57 58 [_stockForKVO setValue:[NSString stringWithFormat:@"%ld",_number] forKey:@"price"]; 59 60 [_stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; 61 62 self.aLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 200, 100, 30)]; 63 64 self.aLabel.textAlignment = NSTextAlignmentCenter; 65 self.aLabel.textColor = [UIColor orangeColor]; 66 self.aLabel.text = [_stockForKVO valueForKey:@"price"]; 67 [self.view addSubview:self.aLabel]; 68 // [self.aLabel release]; 69 70 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 71 72 btn.backgroundColor = [UIColor whiteColor]; 73 btn.frame = CGRectMake(100, 30, 100, 30); 74 75 [btn addTarget:self action:@selector(handleDown:) forControlEvents:UIControlEventTouchUpInside]; 76 77 [self.view addSubview:btn]; 78 79 } 80 81 - (void)handleDown:(UIButton *)sender{ 82 83 84 85 86 87 _number ++; 88 89 [_stockForKVO setValue:[NSString stringWithFormat:@"%ld",_number] forKey:@"price"]; 90 91 } 92 93 94 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 95 96 if ([keyPath isEqualToString:@"price"]) { 97 98 self.aLabel.text = [_stockForKVO valueForKey:@"price"]; 99 100 101 }102 103 104 105 106 }107 108 109 - (void)dealloc{110 [super dealloc];111 [_stockForKVO removeObserver:self forKeyPath:@"price"];112 [_stockForKVO release];113 114 115 }116 117 118 - (void)didReceiveMemoryWarning {119 [super didReceiveMemoryWarning];120 // Dispose of any resources that can be recreated.121 }122 123 /*124 #pragma mark - Navigation125 126 // In a storyboard-based application, you will often want to do a little preparation before navigation127 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {128 // Get the new view controller using [segue destinationViewController].129 // Pass the selected object to the new view controller.130 }131 */132 133 @end
(辛苦手敲,转载请注明出处!)
0 0
- KVC 和KVO浅谈
- 浅谈KVC和KVO
- 浅谈IOS KVC和KVO
- KVC、KVO浅谈(一)
- kvo 和kvc
- KVO和KVC
- KVC和KVO简介
- kvo和kvc
- Iphone 和 KVC/KVO
- kvc和kvo
- KVC和KVO
- KVC、KVO和谓词
- KVC和KVO
- KVO和KVC
- KVC 和KVO机制
- KVO和KVC
- KVC 和 KVO
- KVC和KVO
- 树的子结构
- 卓越管理的秘密(Behind Closed Doors)
- C/C++编程必备网址
- Android面试准备:自定义控件(二)
- sleepSort和硬币概率问题
- KVC 和KVO浅谈
- SQL database common object type
- git error: The following untracked working tree files would be overwritten by merge
- SVN在使用过程中比较纠结的问题记录
- 开关控件、滑块控件和分段控件
- DLLMain函数
- linux下修改ip地址,默认网关以及DNS
- php调用系统命令执行批处理文件
- 开发小型网站的历程