iOS kvo 结合 FBKVOController 的使用

一:FBKVOControlloer是FaceBook开源的一个 在 iOS,maxOS上使用 kvo的 开源库;

提供了block和@selector(SEL) 的回调操作,很方便实用;

https://github.com/facebook/KVOController

二:示例:

    fbKVO = [FBKVOController controllerWithObserver:self];
[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) { //NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self.title = change[NSKeyValueChangeNewKey]; }];

  

三:流程操作
1:创建 Person Object

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic,strong)NSString *pName;

@end

 2: 下载FBKVOController---导入FBKVOController.h   .m文件   ARC环境

#import "FBKVOController.h"
#import "Person.h"

3:创建Person对象(被观察者),及FBKVOController对象(管理观察者与被观察者);

@interface RootViewController ()
{
Person *personOne;
FBKVOController *fbKVO;
}

  

- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"TEST"; listArray = [[NSMutableArray alloc]initWithCapacity:5];
[listArray addObject:@"FBKVOController"]; personOne = [[Person alloc]init];
personOne.pName = @"defaultName"; fbKVO = [FBKVOController controllerWithObserver:self];
[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) { //NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self.title = change[NSKeyValueChangeNewKey]; }]; /**
一:kvo值检测类型;
1: NSKeyValueObservingOptionNew 传递变化之后的值;
2: NSKeyValueObservingOptionOld 传递变化之前的值;
3: NSKeyValueObservingOptionInitial 观察者会在程序初始时,也就是观察变化之前,优化执行一次 观察动作;即上述执行上面 block操作一次;并且传递 默认的值,和以后传递 变化后的值;
4: NSKeyValueObservingOptionPrior 会调用两次观察者操作,值改变之前,值改变之后; 二:获取 kvo的值;
change[NSKeyValueChangeNewKey] 新值;
change[NSKeyValueChangeOldKey] 旧值; */ }

  4:添加改变 被观察者 Person的pName属性值变化操作,然后在 观察者观察到 pName值发生变化时,改变 self.title的值

#pragma mark action 点击

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES]; int nums = arc4random()%10;
personOne.pName = [NSString stringWithFormat:@"newName%d",nums];
NSLog(@"new --> %@",personOne.pName);
}

  

  //在 pName属性值发生变化时,改变self.title的值;

    [fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {

        //NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self.title = change[NSKeyValueChangeNewKey]; }];

  

5:如果想移除观察者:

    //三种方式任你选择;
[fbKVO unobserve:personOne];
[fbKVO unobserve:personOne keyPath:@"pName"];
[fbKVO unobserveAll];

  

6: 效果:

改变值之前

改变值之后

iOS kvo 结合 FBKVOController 的使用的更多相关文章

  1. iOS KVO概述

    iOS KVO概述 面试中经常会被问到:什么是KVO?这个问题既然出现概率这么大,那么我们就来详细讲一讲到底什么是KVO.下次再有面试官问你的时候,你就可以娓娓道来,以彰显高逼格 概述 问:什么是KV ...

  2. iOS:KVO/KVC 的概述与使用

    iOS:KVO/KVC 的概述与使用       KVO   APP开发技术QQ群:347072638 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性 ...

  3. iOS KVO详解

    一.KVO 是什么? KVO 是 Objective-C 对观察者设计模式的一种实现.[另外一种是:通知机制(notification),详情参考:iOS 趣谈设计模式——通知]: KVO 提供一种机 ...

  4. Apple官文中的KVO 与 FBKVOController

    前言 本文将主要介绍以下内容: 详细列出Apple官文中KVO的注意事项(Apple KVO相关的引用皆摘自Apple官文). 介绍FBKVOController,以及它如何避免系统提供的KVO坑点. ...

  5. ios - kvo观察者示例

    首先创建Person分类 #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatom ...

  6. iOS KVO 学习笔记

    //// //// main.m //// TestBasis //// //// Created by ficow on 16/1/14. //// Copyright © 2016年 ficow. ...

  7. iOS - KVO 键值观察

    1.KVO KVO 是 Key-Value Observing 的简写,是键值观察的意思,属于 runtime 方法.Key Value Observing 顾名思义就是一种 observer 模式用 ...

  8. ios kvo

    kvo的使用方法: 1.注册: -(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NS ...

  9. iOS KVO的原理

    KVO(Key Value Observing),是观察者模式在Foundation中的实现.   KVO的原理   简而言之就是:   1.当一个object有观察者时,动态创建这个object的类 ...

随机推荐

  1. BZOJ1007 水平相交直线

    按照斜率排序,我们可以想象如果你能看到大于等于三条直线那么他一定会组成一个下凸包,这样我们只需要判断如果当前这条直线与栈顶第二直线相交点相比于栈顶第二直线与栈顶直线相交点靠左那么他就不满足凸包性质. ...

  2. 「ZJOI2018」历史

    「ZJOI2018」历史 前置知识 \(\text{LCT}\) 维护子树信息,考虑辅助树上一个节点的子树信息只是其代表的这一段链的信息,设 \(S(u)\) 为节点 \(u\) 的子树信息,那么在辅 ...

  3. UOJ #30. [CF Round #278] Tourists

    UOJ #30. [CF Round #278] Tourists 题目大意 : 有一张 \(n\) 个点, \(m\) 条边的无向图,每一个点有一个点权 \(a_i\) ,你需要支持两种操作,第一种 ...

  4. POJ 3162 Walking Race 树形dp 优先队列

    http://poj.org/problem?id=3162 题意 :  一棵n个节点的树.wc爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要 ...

  5. Android Studio NDK开发浅谈

    环境: Android Studio 1.1.0 NDK-r10d 1.新建项目--->包名:com.mxl.az.ndk 新建包含native方法的类:JniOperation.class p ...

  6. Eclipse下使用Stanford CoreNLP的方法

    源码下载地址:CoreNLP官网. 目前release的CoreNLP version 3.5.0版本仅支持java-1.8及以上版本,因此有时需要为Eclipse添加jdk-1.8配置,配置方法如下 ...

  7. 解决XP系统访问Win10打印机被拒绝的问题

    打印机是办公室人员经常会用到的设备,为了方便多人使用都会将打印机设置共享,可是会有许多xp系统用户需要访问win10系统上的打印机,这时候却发现拒绝访问无法连接,该如何解决呢? 其实这是win10做的 ...

  8. PHP 基础函数(四)回调函数

    array_walk($arr,'function','words');  使用用户函数对数组中的每个成员进行处理(第三个参数传递给回调函数function)

  9. ECMAScript5严格模式

    ECMAScript5引入了严格模式(strict mode)的概念,IE10+开始支持.严格模式为JavaScript定义了一种不同的解析和执行模型,在严格模式下,ECMAScript3中的一些不确 ...

  10. JAVA容器-重点总结与深度解析

    重点内容总结 问题思考 问题思考解析