KVOController 1.2.0

KVOController 1.2.0

测试已测试
语言语言 Obj-CObjective C
授权 BSD
发布上次发布2016年9月

Facebook, Inc.Nikita Lutsenko 维护。



  • Kimon Tsinteris 和 Nikita Lutsenko

键值观察(KVO)是 Model-View-Controller 应用中层间通信的一个非常有用的技术。KVOController 构建在 Cocoa 经验证的键值观察实现基础之上。它提供了一个简单、现代的 API,同时还保证了线程安全性。优点包括:

  • 使用块、自定义操作或 NSKeyValueObserving 回调进行通知。
  • 在移除观察者时不会有异常。
  • 在控制器 dealloc 时隐式移除观察者。
  • 线程安全性,并有特殊的防观察者复活的保护措施 - rdar://15985376

有关 KVO 的更多信息,请参阅 Apple 的 键值观察简介

使用

项目包含 iOS 和 OS X 的示例应用。以下是一个简单的使用模式

// create KVO controller with observer
FBKVOController *KVOController = [FBKVOController controllerWithObserver:self];
self.KVOController = KVOController;

// observe clock date property
[self.KVOController observe:clock keyPath:@"date" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew block:^(ClockView *clockView, Clock *clock, NSDictionary *change) {

  // update clock view with new value
  clockView.date = change[NSKeyValueChangeNewKey];
}];

虽然简单,但上述示例已是完整。时钟视图创建一个 KVO 控制器来观察时钟日期属性。使用块回调处理初始和变更通知。由于保留了 KVOController 的强引用,因此在控制器 dealloc 时会隐式进行非观察操作。

注意:指定的观察者必须支持弱引用。零化弱引用保护阻止已 dealloc 的观察者实例的通知。

NSObject 分类

为了更简单的使用,只需 #import <KVOController/NSObject+FBKVOController.h>,这样就可以在所有对象上自动获取 KVOController 属性。

[self.KVOController observe:clock keyPath:@"date" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew action:@selector(updateClockWithDateChange:)];

先决条件

KVOController 利用近年来的 Objective-C 运行时进步,包括 ARC 和弱集合。它需要:

  • iOS 6 或更高版本。
  • OS X 10.7 或更高版本。

安装

要使用 CocoaPods 进行安装,请将以下内容添加到您的项目 Podfile 中

pod 'KVOController'

或者,将 FBKVOController.h 和 FBKVOController.m 拖放到您的 Xcode 项目中,并在需要时同意复制文件。对于 iOS 应用程序,您可以选择链接 KVOController 项目的静态库目标。

使用 CocoaPods 或 Carthage 安装后,请将以下内容添加到 Objective-C 中的导入

#import <KVOController/KVOController.h>

测试

包含的单元测试使用 CocoaPods 管理依赖项。如果您尚未安装 CocoaPods,请先安装它。然后,在命令行中,进入 KVOController 的根目录,并输入以下内容

pod install

这将安装并添加 OCHamcrest 和 OCMockito 的测试依赖项。重新打开 Xcode 的 KVOController 工作区并进行测试,按⌘U。

许可证

KVOController 在 BSD 许可证下发布。有关详细信息,请参阅 LICENSE 文件。