NotificationHandler
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 或更高版本。
还有一件事
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或更高版本上,如果观察者可以弱存储,并且使用选择器注册通知,则无需注销通知。