NotificationHandler 0.5.0

NotificationHandler 0.5.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2018年4月
SPM支持 SPM

Xing He 维护。



  • 作者:
  • Xing He

NotificationHandler

Carthage Compatibility Build Status

NotificationHandler以更友好的API包装了几乎所有的与 NSNotification 相关的操作。

功能包括

  • 现代且清晰的函数签名。
  • 在观察者释放时隐式移除观察者。

用法

// With closure
notificationHandler.observe(notificationName) { notification in
    // do something...
}

// With selector
notificationHandler.observe(notificationName, selector: #selector(Object.sayHi)

这是完整的示例。

NSObject分类

提供NSObject分类,以便您可以直接访问处理器,如上所示。

安装

CocoaPods

在您的 Podfile 中(请注意,它需要 Cocoapods 0.36 或更高版本)

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'NotificationHandler'

Carthage

Carthage 是用于 Cocoa 应用的去中心化依赖管理器。

要使用 CocoaPods 将 NotificationHandler 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "kukushi/NotificationHandler"

需求

NotificationHandler 使用 ARC 和 weak 集合,基于 Swift 2.2。它需要

  • iOS 8 或更高版本。
  • Xcode 7.3 或更高版本。

还有一件事

🎉正如 Apple 所述,与 NSNotificationCenter 相比的一些小变化

NSNotificationCenter

在 OS X 10.11 和 iOS 9.0 中,NSNotificationCenter 和 NSDistributedNotificationCenter 将不再向已注册的观察者发送可能被释放的通知。如果观察者能够作为零引用弱引用存储,则底层存储将观察者存储为零引用弱引用;否则,如果不能将对象弱引用(即它具有阻止运行时将其存储为弱引用的自定义保留/释放机制),它将对象存储为非弱引用的零引用。这意味着观察者不需要在卸载方法中注销。下一个将路由到该观察者的通知将检测到零引用并自动注销观察者。如果对象可以被弱引用,则在卸载期间不再向观察者发送通知;在非弱引用零引用观察者的案例中,接收通知的先前的行为仍然存在。通过 -[NSNotificationCenter addObserverForName:object:queue:usingBlock] 方法添加的基于块的观察者仍然需要在不再使用时注销,因为系统仍然持有对这些观察者的强引用。过早地删除观察者(无论是弱引用还是零引用)仍然受支持。CFNotificationCenterAddObserver 不符合此行为,因为观察者可能不是对象。

从现在起,NSNotificationCenter和NSDistributedNotificationCenter在调试器中打印时将提供调试描述,列出所有已注册的观察者,包括用于帮助调试通知注册的已置零的引用。由于底层存储必须考虑多线程环境,因此这些数据仅在断点持续时间有效。对于传递给addObserver方法族的名字或对象为null的通知的通配符注册,将在调试描述中打印为*。

短版:在OS X 10.11和iOS 9.0或更高版本上,如果观察者可以弱存储,并且使用选择器注册通知,则无需注销通知。