OC-KVO
来源:互联网 发布:剑网3喵哥捏脸数据 编辑:程序博客网 时间:2024/06/05 18:21
/**********************Person*******************************/
/*使用Person监听bank的成员变量:opening的变化,
其中添加了一个定时器,每过一秒就会启动指定的方法一次
*/
Person.h
#import <Foundation/Foundation.h>
@class Bank;
@interface Person : NSObject
{
Bank *bank;
}
@property(nonatomic)Bank *bank;
//打开监听器
-(void)registerVS;
@end
Person.m
#import "Person.h"
#import "Bank.h"
@implementation Person
-(id)init{
if (self = [super init]) {
bank = [[Bank alloc] init];
}
return self;
}
//产生一个随机的指针:BankCount
//指向自己的指针:
static void *BankCount = (void *)&BankCount;
-(void)registerVS{
[bank addObserver:self forKeyPath:@"opening" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:BankCount];
/*
给银行账户“bank”增加一个监听者self,监听银行账户的成员变量:“opening”
只要“opening”的值改变就会让self知道,
*/
}
//监听的回调函数:
//只要opening有变化就调用下面的函数
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
/*
"kepat"表示之前的Key-“opening”,
“object”表示之前的对象-“bank”;
“Change”是一个包含 新、旧值的字典;
context 是私有变量:BankCount;
*/
NSLog(@"object = %@ keypath = %@",object,keyPath);
//下面的判断可以换成:[keypath isEqualToString:@"opening"];
if (context == BankCount) {
NSString *str = [change objectForKey:NSKeyValueChangeNewKey];
NSLog(@"%@",str);
}
else{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
@end
/**********************Bank*******************************/
Bank.h
#import <Foundation/Foundation.h>
@interface Bank : NSObject
{
float _opening;
}
@property(nonatomic) float opening;
-(void)BankUpdata:(id)obj;
-(void)Update:(float)opening;
@end
Bank.m
#import "Bank.h"
@implementation Bank
-(id)init{
if (self = [super init]) {
//定时器:每个1秒执行一次,
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(BankUpdata:) userInfo:nil repeats:YES];
//防止定时器关闭,
//[[NSRunLoop currentRunLoop] run];
//BankUpdata的参数是NSTimer的对象!!
}
return self;
}
-(void)BankUpdata:(id)obj{
float f = self.opening;
f+=arc4random()%100;
self.opening = f;
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Bank.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *per = [[Person alloc] init];
[per registerVS];
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
- OC KVO
- OC-KVO
- OC-KVO
- OC-KVO
- OC - KVO
- OC KVO
- OC学习之KVO
- OC-KVC/KVO
- oc中kvc kvo
- oc 语法 kvo
- OC之KVO
- OC键值监听(KVO)
- OC-KVO的应用
- OC中的KVO
- oc语言kvo
- oc——KVO
- OC-KVC/KVO
- OC的KVO模式漫谈
- java
- What to do if you've deleted a file (or multiple files)
- Xshell不能按退格、删除键和中文乱码的解决方案
- C# MVC框架(2)---快速入门
- 新浪微博分享 (获取用户授权时出现 error :redirect_uri_mismatch 的问题)
- OC-KVO
- rgdsfg
- Hello World
- 【Testin实验室】MoiMark安卓中国终端体验性能排行榜(11月报)
- PL/SQL Developer 使用技巧总结
- 当达到文本域的最大字符数时跳至下一个域
- Python基础学习篇—IDLE快捷键一览
- asp.net 超时介绍
- ubuntu 安装 JDK