Save 37% off PRO during our Black Friday Sale! »

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

684e373a0870f7be5b78f0d29bfde968?s=47 Cee
May 23, 2016

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

684e373a0870f7be5b78f0d29bfde968?s=128

Cee

May 23, 2016
Tweet

Transcript

  1. Swift NotificationCenter 使用与原理介绍 项目地址:github.com/100mango/SwiftNotificationCenter 8点钟正式开始~ 现在是闲聊时间。有什 么问题,直接在评论里面留言即可。 欢迎关注:SwiftGG微信公众账号与微博账号,也欢迎订阅我们的开发 者周报。 我的个人微博:

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

    SwiftGG官方网站: swift.gg SwiftGG官方微博: SwiftGG翻译组
  3. 简介 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.
  4. Demo演示 u Easy To Use. u It just works.

  5. 1.原理:

  6. 2.线程安全 u 内建一个Dispatch Concurrent Queue。通过GCD的 dispatch_barrier_async和dispatch_sync来处理单一资源的多读单写。类 似于read-write lock u

  7. 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》
  8. None
  9. 3.内存安全

  10. 对比NSNotificationCenter u 1. 无需定义NotificationName. 无字符串冲突可能 u 2. 不再需要使用字典来传递数据, 不需要从字典取出数据,然后再向下转 型的操作。

    u 3. 通过Protocol而不是字符串来定义广播的媒介。我们可以把相同的 广播集中在一起。
  11. None
  12. Refactor System Notification u Demo

  13. Thanks! u 项目地址: https://github.com/100mango/SwiftNotificationCenter u 欢迎多多指教 u 直播代码讲解是一个非常不直观的方式。所以我非常建议大家 下载源代码。按照今天讲的几个点来阅读。会比看直播直观非 常多倍。

  14. FAQ: u 问: t.Type 能讲一下吗? u 回答: 就是代表一个类的类型而已。没有什么特别的地方。

  15. u 问: 应该也需要register吧? u 回答: 是的。 需要register. 这是理所当然的。因为我们需要把自己注册 到通知中心去。 u

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

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

    性能损耗。 答: 这个损耗几乎为0,我们也可以给中间人加一个unregister 的方法。当你不需要的时候去调用。但是仅仅只有一个单例接收系统通知, 性能损耗基本为0。 u 有许多人都关注到用这个库来封装系统的通知。 这是可以的。不过这个库 的最大价值还在于我们自己的一对多的通知需求。
  18. u 今晚的直播就到这里结束。可以再闲聊一会儿。 u 欢迎关注SwiftGG. 官方网站(swift.gg) 官方微博(SwiftGG翻译组) u 项目名称: SwiftNotificationCenter (再次建议阅读源代码,比直播讲解

    会更直观) u 项目地址: github.com/SwiftNotificationCenter u Po主微博: weibo.com/100mango