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. Xcode真机调试初体验

    1. 开发者证书(Certificates) 分为开发(iOS Development)和发布(iOS Distribution)两种,无论是真机调试,还是上传到App Store都需要该证书,是一个 ...

  2. 【BZOJ 1272】 1272: [BeiJingWc2008]Gate Of Babylon (容斥原理+卢卡斯定理)

    1272: [BeiJingWc2008]Gate Of Babylon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 254  Solved: 12 ...

  3. 【BZOJ 2299】 2299: [HAOI2011]向量 (乱搞)

    2299: [HAOI2011]向量 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1255  Solved: 575 Description 给你一 ...

  4. 【51Nod 1815】【算法马拉松 23】调查任务

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1815 tarjan缩点后在DAG上递推即可. 每个点维护所有根到它的路径 ...

  5. Android演示Stack(课下作业)

    Demand 之前活动中误传成别的截图,故在此补充博客 1.使用自己实现的栈构建Android程序,提供用于栈的一个puh按钮和pop按钮,在文本域接收一个字符串作为push的输入,文本区将显示每个操 ...

  6. Makefile-有三个非常有用的变量。分别是$@,$^,$<代表的意义

    $@ 代表目标文件,$^ 代表所有的依赖文件,$< 代表第一个依赖文件. # 这是简化后的Makefilemain:main.o mytool1.o mytool2.o gcc -o $@ $^ ...

  7. noip200706字符串的展开

    试题描述: 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获 ...

  8. 判断一个js对象是不是数组

    //今天突然想到一个问题,如何判断一个对象是不是数组 var arr = [0, 1, 2]; console.log(arr) //object, 显然不行 //查阅了很多资料,发现几个挺不错的方法 ...

  9. hihocoder155周 任务分配

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多 ...

  10. Sencha Touch开发环境搭建及ext插件Spket安装

    第一步:JAVA SDK(JDK)的安装 以去问百度下载JDK,也可以到官方下载JDK. 下载地址: http://www.oracle.com/technetwork/java/javase/dow ...