oc 语法 kvo

来源:互联网 发布:算法基础打开算法之门 编辑:程序博客网 时间:2024/05/16 08:53

点名主题 :

kvo就是一个类来监听另外一个类的变量,当变量发生改变的时候来通知这个类。

举个例子:

创建一个人的类,人的类中有一个银行卡;创建一个银行卡的类,银行卡的类中有一个钱的变量;

我们来用人的类来监听银行卡中的钱数,当银行卡中的钱数发生改变的时候来通知人;

下面我们来实现这个例子;

新建一个


创建一个person类

person.h

#import <Foundation/Foundation.h>@class BankCard;@interface Person : NSObject{    BankCard *bancard;//银行卡}@end

person.m

#import "Person.h"#import "BankCard.h"@implementation Person//重写初始化函数-(id) init{    self = [super init];    if(self)    {        bancard = [[BankCard alloc]init];        //添加一个监听 监听的变量为 bancard 中得money的变量  旧的值和新的值        [bancard addObserver:self forKeyPath:@"money" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];    }    return self;}//当监听的值发生改变的时候自动调用该方法-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    if([keyPath isEqual:@"money"])    {        NSString *new = [change objectForKey:@"old"];        NSString *old =[change objectForKey:@"new"];        NSLog(@"%@   %@",new,old);    }}@end

银行卡类:

BankCard.h

#import <Foundation/Foundation.h>@interface BankCard : NSObject@property (nonatomic,assign) float money;@end
BankCard.m

#import "BankCard.h"@implementation BankCard-(id)init{    self = [super init];    if(self)    {        _money=10.0f;        //这里用了定时器,看不懂没关系,知道意思就行,就是每隔1秒调用一下balanceUpdate这个函数来改变money的值,以便我们来观察是否监听成功;        [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(balanceUpdate) userInfo:nil repeats:YES];        }    return self;}-(void) balanceUpdate{    float f = self.money;    f += arc4random()%100;//产生一个0-99 的随机数    self.money = f;}@end

main.m

#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){    @autoreleasepool {                // insert code here...        NSLog(@"Hello, World!");        Person *p = [[Person alloc]init];        [[NSRunLoop currentRunLoop]run];    }    return 0;}


运行结果:

2014-07-25 21:51:32.210 IOS KVO[3388:303] Hello, World!2014-07-25 21:51:33.214 IOS KVO[3388:303] 10   932014-07-25 21:51:34.213 IOS KVO[3388:303] 93   1542014-07-25 21:51:35.214 IOS KVO[3388:303] 154   1822014-07-25 21:51:36.213 IOS KVO[3388:303] 182   2142014-07-25 21:51:37.213 IOS KVO[3388:303] 214   3072014-07-25 21:51:38.213 IOS KVO[3388:303] 307   3582014-07-25 21:51:39.213 IOS KVO[3388:303] 358   4042014-07-25 21:51:40.213 IOS KVO[3388:303] 404   4932014-07-25 21:51:41.213 IOS KVO[3388:303] 493   542Program ended with exit code: -1

参考自千锋视频。

3 0
原创粉丝点击