FXNotifications 1.1.1

FXNotifications 1.1.1

测试已测试
Lang语言 Obj-CObjective C
许可证 zlib
发布最后发布2016年4月

Nick Lockwood维护。



  • 作者:
  • Nick Lockwood

目的

FXNotifications是NSNotificationCenter上的一个类别,它提供了一个改进的基于块(block)的API,更加简洁且易于使用,避免了官方API中存在的各种保持循环(retain cycle)和内存泄漏(memory leak)陷阱。

更多详细信息,请参阅以下文章:

支持的iOS和SDK版本

  • 支持的构建目标 - iOS 7.1 / Mac OS 10.9(Xcode 5.1,Apple LLVM编译器5.1)
  • 最早支持的部署目标 - iOS 5.0 / Mac OS 10.7
  • 最早兼容的部署目标 - iOS 5.0 / Mac OS 10.7

注意:“支持”意味着库已在此版本上进行了测试。“兼容”意味着库应该能在该iOS版本上运行(即不依赖于任何不可用的SDK功能),但不再进行兼容性测试,并且可能需要调整或修复错误才能正常运行。

ARC兼容性

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

  • 当将nil作为队列参数传递时,FXNotifications不再捕获当前队列。相反,该块将直接在通知发布的队列上执行。
  • 观察者不再作为弱参数传递给块,这意味着它担保在块的执行过程中不会释放。
  • 每次调用 addObserver 方法时都会返回一个唯一的令牌,这使得它可以根据标准实现用于细粒度再次注册(令牌的使用是可选的,如果不需要,可以安全地丢弃它)。
  • 现在符合 -Weverything 警告级别

版本 1.0.2

  • 修复了在删除观察者后无法重新附加的问题。

版本 1.0.1

  • 修复了删除观察者不起作用的问题。
  • 当队列参数为nil时,现在默认为[NSOperationQueue currentQueue]。
  • 添加了 CocoaPods podspec。

版本 1.0

  • 首次发布