Objective-C入门18:KVO
来源:互联网 发布:陈浩民 妻子 知乎 编辑:程序博客网 时间:2024/05/20 14:19
Objective-C入门18:KVO
main.m
#import <Foundation/Foundation.h>#import "Dog.h"#import "Parson.h"#import "Yinger.h"#import "Baomu.h"int main(int argc, const char * argv[]) { @autoreleasepool { // key---value---observer (键值观察者) // 通过 key 来观察 value 的变化 去做出响应 // KVO (键值观察者)主要用于视图交互方面,比如界面的某些数据变化了, // 界面的显示也跟着需要变化,那就是要建立数据和界面的关联 // KVO 是一对一的传值 // 通过 key 来监测 值是否发生改变 如果发生改变 就会自动调用 KVO 的响应方法 Dog *daHuLang = [ [ Dog alloc ] init ] ; daHuLang.face = @"smile" ; // 使用的 KVC 的知识 [ daHuLang setValue:@"耸拉着" forKey:@"weiBa" ] ; Parson *liBai = [ [ Parson alloc ] init ] ; [ liBai watchDog:daHuLang ] ; daHuLang.face = @"wang!wang!wang!" ; [ daHuLang setValue:@"摇着尾巴" forKey:@"weiBa" ] ; Yinger *daBao = [ [ Yinger alloc ] init ] ; [ daBao setValue:@"平静" forKey:@"zhuangtai" ] ; Baomu *baomu = [ [ Baomu alloc ] init ]; [ baomu watchYinger:daBao ] ; [ daBao setValue:@"ha~ha~" forKey:@"zhuangtai" ] ;// [ daBao setValue:@"wa~wa~" forKey:@"zhuangtai" ] ; } return 0;}
Parson.h
#import <Foundation/Foundation.h>@class Dog ;@interface Parson : NSObject{ Dog *watchDog ;}// 遇到一只狗 观察狗表情的变化- (void)watchDog:(Dog *) dog ;@end
Parson.m
<pre name="code" class="objc">#import "Parson.h"#import "Dog.h"@implementation Parson- (void)watchDog:(Dog *) dog{ watchDog = dog ; // 观察狗的表情 [ watchDog addObserver : self forKeyPath:@"face" options : NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context : nil ] ; [ watchDog addObserver : self forKeyPath:@"weiBa" options : NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context : nil ] ; }// 狗的新旧表情发生改变 会自动调用这个方法// keyPath 来判断 是不是咱们观察的 key 对应的值 发生改变// change 是一个字典 字典里面放了 新旧属性值的内容- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ( [ keyPath isEqualToString:@"face" ] ) { NSLog(@"%@",change); NSLog(@"狗的表情由%@变成%@",change[@"old"],change[@"new"]); [ self shutdown ] ; } if ( [ keyPath isEqualToString : @"weiBa" ] ) { NSLog(@"狗的尾巴由%@变成%@",change[@"old"],change[@"new"]); [ self toEat ] ; }}- (void)toEat{ NSLog(@"扔一大块肉~" ) ;}- (void)shutdown{ NSLog( @"打死" ) ;}- (void)dealloc{ [ watchDog removeObserver : self forKeyPath:@"face" ] ; [ watchDog removeObserver : self forKeyPath:@"weiBa" ] ;}@end
Dog.h
#import <Foundation/Foundation.h>@interface Dog : NSObject{ NSString *weiBa ;}@property (nonatomic,copy) NSString *face ;@end
Dog.m
#import "Dog.h"@implementation Dog@end
Baomu.h
#import <Foundation/Foundation.h>@class Yinger ;@interface Baomu : NSObject{ Yinger *watchYinger ;}// 观察婴儿表情的变化- (void)watchYinger:(Yinger *) yinger ;@end
Baomu.m
#import "Baomu.h"#import "Yinger.h"@implementation Baomu- (void)watchYinger:(Yinger *)yinger{ watchYinger = yinger ; // 观察婴儿的表情 [ watchYinger addObserver : self forKeyPath:@"zhuangtai" options : NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context : nil ] ; }// 狗的新旧表情发生改变 会自动调用这个方法// keyPath 来判断 是不是咱们观察的 key 对应的值 发生改变// change 是一个字典 字典里面放了 新旧属性值的内容- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ( [ keyPath isEqualToString:@"zhuangtai" ] ) { NSLog(@"%@",change); NSLog(@"婴儿的表情由%@变成%@",change[@"old"],change[@"new"] ); if ( [ change[@"new"] isEqualToString: @"wa~wa~" ] ) { NSLog( @"保姆喂奶" ) ; } else if ( [ change[@"new"] isEqualToString: @"ha~ha~" ] ) { NSLog(@"保姆给一个玩具" ) ; } }}- (void)dealloc{ [ watchYinger removeObserver : self forKeyPath:@"zhuangtai" ] ;}@end
Yinger.h
#import <Foundation/Foundation.h>@interface Yinger : NSObject{ NSString *zhuangtai ;}@end
Yinger.m
#import "Yinger.h"@implementation Yinger@end
0 0
- Objective-C入门18:KVO
- Objective-C语法入门之KVC & KVO
- Objective-C KVO&KVC
- Objective-C KVO 编程
- objective-c kvo
- Objective-C KVO
- objective-c KVO机制
- Objective-C KVC&KVO
- Objective-c中的KVC、KVO
- Objective-c KVO and KVC
- Objective-c KVO,KVC例子
- KVO机制 ----Objective-C笔记
- objective c设计模式--KVO
- Objective-C KVC - KVO
- Objective-C 之 KVO 详解
- Objective-C之KVC、KVO
- Objective-C之KVC、KVO
- 4.KVO,KVO,通知之objective-c
- mysql和eclipse都设置了utf8编码,保存时中文依然乱码
- jQuery("#").autocomplete 出现Status Code:404 Not Found
- Java 设计模式——工场模式(Factory method)
- iOS设计模式——委托(delegate)
- meta标签之viewport
- Objective-C入门18:KVO
- listView使用的万能的BaseAdapter
- UIKit框架的介绍
- Servlet中的GET和POST之间的区别
- Theano 配置记(Anaconda+Theano 0.7+GPU加速+VS2010)
- TIME_WAIT状态(2MSL)的作用
- 图文解释XCode常用快捷键的使用
- ZigZag Conversion 问题
- apache的<directory> 语句以及属性的含义