FXNotifications是NSNotificationCenter
上的一个类别,它提供了一个改进的基于块(block)的API,更加简洁且易于使用,避免了官方API中存在的各种保持循环(retain cycle)和内存泄漏(memory leak)陷阱。
更多详细信息,请参阅以下文章:
注意:“支持”意味着库已在此版本上进行了测试。“兼容”意味着库应该能在该iOS版本上运行(即不依赖于任何不可用的SDK功能),但不再进行兼容性测试,并且可能需要调整或修复错误才能正常运行。
FXNotifications需要 ARC 并使用弱引用。
可以在不同的线程上安全地使用FXNotification方法添加和移除观察者。回调块将在指定的队列上执行。
要使用FXNotifications,只需将FXNotifications.h和.m文件拖入您的项目,并在您的类中导入头文件。
FXNotifications使用一个方法扩展了NSNotificationCenter
- (id)addObserver:(id)observer
forName:(NSString *)name
object:(id)object
queue:(NSOperationQueue *)queue
usingBlock:(void (^)(NSNotification *note, id observer))block;
此方法结合了两种内置的观察器方法的特性。观察器参数是必需的,代表块参数的所有者。当观察者被释放时,块也将被释放。
名称、对象、队列和块参数的工作方式与正常的基于块的观察器方法相同。队列参数是可选的 - 如果传入nil,则块将在从哪个队列发布通知的队列上执行。为了避免在块中产生保持循环,您可以参考作为第二个参数传入的弱观察者参数。
此方法返回一个令牌值,可用于停止观察通知,使用标准-removeObserver:
方法,例如
[[NSNotificationCenter defaultCenter] removeObserver:token];
然而,您可以简单地丢弃此令牌,当观察者被释放时,令牌将自动注销。在观察者的析构方法中不需要调用removeObserver:,这是自动完成的。
此外,如果需要,可以使用-removeObserver:
或-removeObserver:name:object:
方法注销观察者本身,使用NSNotificationCenter
,这样存储令牌的唯一原因就是在相同观察者和选择器下区分多个注册。
典型用法可能如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self
forName:NSSomeNotificationName
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note, id observer) {
NSLog(@"self: %@", observer); // look, no leaks!
}];
版本 1.1
版本 1.0.2
版本 1.0.1
版本 1.0