美文网首页
经验拾遗之KVO

经验拾遗之KVO

作者: saintPN | 来源:发表于2016-03-21 18:07 被阅读0次

一看就懂demo下载,地址:github

  iOS开发,肯定免不了要接触苹果的黑魔法:kvo,翻译过来有点拗口叫键值观察,如果是我翻译的话会选择叫“望咩望”,哈哈。其实kvo本质来说就是针对一个对象的变动进行操作,注意,是针对变动。如果app中有需求是针对某对象变动需要进行对应的操作的话,kvo是理想的实现技术。下面,来实践一下。

1.创建一个类,重写- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context方法:

@implementation AppStatusWatcher

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

NSLog(@"Property '%@' of object '%@' changed: %@ context: %@",keyPath,object,change,context);

}

@end

2.在app delegate中处理,定义了一个appStatus属性,当变动时,观察者watcher就会接收到通知,并且变动前后的值都可以选择传递过来:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.watcher = [AppStatusWatcher new];

[self addObserver:self.watcher forKeyPath:@"appStatus" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"望咩望"];

self.appStatus = @"launch";

return YES;

}

3.在app的不同阶段,改变appStatus的值:

- (void)applicationWillResignActive:(UIApplication *)application {

self.appStatus = @"inactive";

}

- (void)applicationDidEnterBackground:(UIApplication *)application {

self.appStatus = @"background";

}

- (void)applicationWillEnterForeground:(UIApplication *)application {

self.appStatus = @"inactive";

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

self.appStatus = @"active";

}

- (void)applicationWillTerminate:(UIApplication *)application {

self.appStatus = @"terminate";

}

4.appstatus的值一改变,watcher就会接收到通知,执行自定义操作,实际运行效果:

2016-03-21 17:59:23.663 KVO[5767:13407361] Property 'appStatus' of object '' changed: {    kind = 1;    new = launch;    old = "";} context: 望咩望

2016-03-21 17:59:23.668 KVO[5767:13407361] Property 'appStatus' of object '' changed: {    kind = 1;    new = active;    old = launch;} context: 望咩望

2016-03-21 17:59:28.249 KVO[5767:13407361] Property 'appStatus' of object '' changed: {    kind = 1;    new = inactive;    old = active;} context: 望咩望

2016-03-21 17:59:28.881 KVO[5767:13407361] Property 'appStatus' of object '' changed: {   kind = 1;     new = background;    old = inactive;} context: 望咩望

相关文章

  • 经验拾遗之KVO

    一看就懂demo下载,地址:github iOS开发,肯定免不了要接触苹果的黑魔法:kvo,翻译过来有点拗口叫键...

  • iOS面试 - 收藏集 - 掘金

    KVC 与 KVO 拾遗补缺 - iOS - 掘金KVC 和 KVO 是 Cocoa 框架提供的一个非常强的特性,...

  • KVO拾遗

    KVO定义 KVO全称Key Value Observing,根据runtime实现的,是观察者设计模式的一种实现...

  • 关于KVO的那些事 之 KVO安全用法封装

    关于KVO的那些事 之 KVO安全用法封装 KVO (Key Value Observering) 是iOS用于监...

  • 经验拾遗之定位功能

    iOS开发,定位功能是很多app的核心功能,也是出门在外的必用功能,现在来重新整理一下CoreLocation这...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • 你只看到张爱玲的悲惨,却不曾看懂她的高级

    心之助(微信:luyuexinli) 文 | 拾遗(本文已获授权) 来源:拾遗(ID:shiyi201633) 0...

  • 初学swift之KVO

    初学swift之KVO KVO相当于给一个已有对象的属性添加一个属性观察器 KVO三步 1.注册 2.监听 3.移...

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • KVC、KVO

    IOS开发系列--Objective-C之KVC、KVO - KenshinCui - 博客园

网友评论

      本文标题:经验拾遗之KVO

      本文链接:https://www.haomeiwen.com/subject/xtiklttx.html