Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「SwiftGG Show」第六期 - Swift Notification Center【1...

Cee
May 23, 2016

「SwiftGG Show」第六期 - Swift Notification Center【100mango】

Cee

May 23, 2016
Tweet

More Decks by Cee

Other Decks in Programming

Transcript

  1. 自我介绍 u 方秋枋 u SwiftGG翻译组成员 u 微博:weibo.com/100mango u Github: github.com/100mango

    SwiftGG官方网站: swift.gg SwiftGG官方微博: SwiftGG翻译组
  2. 简介 u For one-to-many LIKE NSNotificationCenter u 1.Type Safe u

    No more userInfo dictionary and Downcasting, just deliver the concrete type value to the observer. u 2.Thread Safe u You can register, notify, unregister in any thread without crash and data corruption. u 3.Memory Safety u SwiftNotificationCenter store the observer as a zeroing-weak reference. No crash and no need to unregister manually.
  3. Why queue than lock? u Cocoa没有原生支持读写锁。 u 队列的实现更简洁优雅。 u A

    read-write lock is also referred to as a shared-exclusive lock. This type of lock is typically used in larger-scale operations and can significantly improve performance if the protected data structure is read frequently and modified only occasionally. ——《Threading Programming Guide》
  4. u 问: 应该也需要register吧? u 回答: 是的。 需要register. 这是理所当然的。因为我们需要把自己注册 到通知中心去。 u

    但是使用SwiftNotificationCenter 是不需要手动unregister的。只要对象销 毁了,就不会再向它发送通知。 u No Crash.
  5. u 问: 你刚刚讲的那个重构系统KeyboardNotification的部分,感觉就是把 系统繁琐的Notification的代码封装了一下? u 回答: u 是的。 这里的目的是把系统的Notification包装成像 SwiftNotificationCenter

    API 一样。简洁 好用 安全。而且代码能够复用, 以后再也不需要每次都进行繁琐的NSNotificationCenter操作。 u 但是 如果你不需要处理系统的通知,你完全可以自己定义属于自己的一对 多通知。
  6. u 问: 你那个中间人会不会Unregister掉这个系统通知: u 答: 这个中间人是一个单例,用于处理全局的系统通知。生命周期是与App 一致的。所以不需要unregister. u 问: 那么没有人用这个通知的时候,中间人还接收相关的通知,会不会有

    性能损耗。 答: 这个损耗几乎为0,我们也可以给中间人加一个unregister 的方法。当你不需要的时候去调用。但是仅仅只有一个单例接收系统通知, 性能损耗基本为0。 u 有许多人都关注到用这个库来封装系统的通知。 这是可以的。不过这个库 的最大价值还在于我们自己的一对多的通知需求。