星空网 > 软件开发 > 操作系统

iOS.OC.03 KVO

KVO Key,Value,Observing,即键值观察者。它提供了这样一种机制,当指定对象的属性发生改变时,KVO会自动通知相应的观察者。

它与NSNotification不同,键-值观察中并没有所谓的中心对象来为所有观察者 提供变化通知。取而代之地,当有变化发生时,通知被直接发送至处于观察状态的对象。

三个步骤:注册观察者,接收变更通知,移除观察者。实例如下:

创建一个工程,创建两个类,一个Baby,一个Mother。Baby有一个属性hungryNum,叫饥饿值吧,当饥饿值改变的时候mother接收饥饿值变更。

Baby.h

#import <Foundation/Foundation.h>

@interface Baby : NSObject

@property(nonatomic,assign)NSInteger hungryNum;

@end

 

Mother.m

#import "Mother.h"

 @implementation Mother

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

     if ([keyPath isEqualToString:@"hungryNum"]) {

       //每当监听的属性hungryNum改变时,打印hungryNum的当前值和之前值。

       NSLog(@"%@  %@",[change objectForKey:@"new"],[change objectForKey:@"old"]);

  }

}

 @end





 

ViewController.m

#import "ViewController.h"

#import "Baby.h"//引入头文件

#import "Mother.h"

@interface ViewController ()

@end

 @implementation ViewController

 - (void)viewDidLoad {

    [super viewDidLoad];

    Baby * xiaoxiao=[[Baby alloc]init];//创建对象

    Mother * xiaoMama=[[Mother alloc]init];

    

  //注册观察者,xiaoxiao添加了观察者xiaoxiaoMama,观察hungryNum属性。

     [xiaoxiao addObserver:xiaoMama forKeyPath:@"hungryNum" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

    xiaoxiao.hungryNum=10;//给xiaoxiao的hungryNum属性附一个初值,用一个for循环使得该属性的值改变,每次值改变都会通知监听者。

    for (xiaoxiao.hungryNum; xiaoxiao.hungryNum>0; xiaoxiao.hungryNum--) {

    }

    //移除观察者,注意:如果不移除,程序运行到此会奔溃。

    [xiaoxiao removeObserver:xiaoMama forKeyPath:@"hungryNum"];

}

 

打印结果:

2015-03-21 17:11:29.735 OMG[2366:148640] 10  0

2015-03-21 17:11:29.736 OMG[2366:148640] 9  10

2015-03-21 17:11:29.736 OMG[2366:148640] 8  9

2015-03-21 17:11:29.736 OMG[2366:148640] 7  8

2015-03-21 17:11:29.736 OMG[2366:148640] 6  7

2015-03-21 17:11:29.736 OMG[2366:148640] 5  6

2015-03-21 17:11:29.736 OMG[2366:148640] 4  5

2015-03-21 17:11:29.737 OMG[2366:148640] 3  4

2015-03-21 17:11:29.737 OMG[2366:148640] 2  3

2015-03-21 17:11:29.737 OMG[2366:148640] 1  2

2015-03-21 17:11:29.737 OMG[2366:148640] 0  1

 

如有错误,请不吝赐教,必改之。




原标题:iOS.OC.03 KVO

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

警惕!这个公司玩合同诈骗,已有多家外贸公司上当!:https://www.ikjzd.com/articles/23302
震惊互联网,亚马逊在中国遭到滑铁卢?:https://www.ikjzd.com/articles/23308
更换亚马逊官方收款致账户被冻结?如何更换收款账号才安全?:https://www.ikjzd.com/articles/2331
收藏 | 10大网站为你提供选品灵感!:https://www.ikjzd.com/articles/23314
你感觉亚马逊,真的退出中国市场了吗?:https://www.ikjzd.com/articles/23315
深度解析—跨境电商亚马逊无货源,面向全球!:https://www.ikjzd.com/articles/23321
恐怖游轮2002 恐怖游轮2022:https://www.vstour.cn/a/365178.html
时尚电商平台Meesho拟融资3亿美元!:https://www.kjdsnews.com/a/1836524.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流