问题一: 代理, 通知, block区别是什么
通知
- 使用
观察者模式
来实现用于跨层传递
消息机制 - 传递方式一对多
- 没有回调
代理
- 使用
代理模式
来实现传递 - 传递方式
一对一
- 需要创建协议
- 协议和实现是分开的,可读性差,可维护性高
- 运行成本低, 消耗少
- 可以回调
block
- 本质是
OC对象
- 传递方式
一对一
- 比较简便,快捷,可读性好一些
- 效率高 (block效率高是因为block是内联)
- 运行成本高 (当block出栈时,会将使用的数据从
栈内存
拷贝到堆内存
,对象引用计数+1,导致运行成本高) - 可以回调
问题二: 描述下通知一对多的流程
发送者
(代码实现是postnotification方法调用)经由通知中心
广播给其他观察者
问题三: 通知的实现机制或者让你设计实现通知机制
- 通知中心内部维护一张通知表
- 通知表以通知名称NotificationName做key, 以观察者集合Observer做value
- Observer数组列表, 包含通知接收观察者, 回调方法等相关数据信息