Notifications vs Delegates

最近一直在忙着准备暑期的实习面试,所以最近开始复习OC基础知识。偷得半日闲,总结下面试考滥了的delegate和notification。

此两君的不同主要体现在以下两个方面:

代码耦合性

Notifications: “一对多”,松耦合
这是因为,发送notification的对象并不知道谁需要这个notification。松耦合带来的好处是可以用notification实现“一对多”的功能,让许多不同的对象能够监听相同的notification;坏处是会给debug带来不便,因为一旦发送notification的对象做出了改变,会影响到所有监听此notification的对象。debug起来将会是相当痛苦的一件事。

Delegates: “一对一”,紧耦合
这是因为, delegating 对象具有其 delegate 的直接引用(例如:_tableView.delegate = self; 这里_tableView是delegating对象,self是delegate对象)。所以delegating对象知道是否有delegate对象,并且可以通过内省(introspection)方式知道它的delegate实现了哪些方法。

数据流向

Notifications: 单方向
Notification 是一个主动的过程,只负责发送出某个信息。并不关心接收者是谁。

Delegates: 双方向
在Delegates模式中,数据可以从delegating流向delegate ,也可以从delegate流向delegating。这里最典型的就是tableView的情况了,在tableView中,dataSource就是一个数据从delegate流向delegating的过程,delegate就是数据从delegating流向delegate的过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,211评论 30 472
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 887评论 0 4
  • 1.Difference between shallow copy and deep copy? 浅复制和深复制的...
    用心在飞阅读 1,027评论 0 9
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,252评论 1 23
  • 今天,和几位同学一起回家,路上看到了初中的老师,刚刚步入高中的我心里还有点小激动,我们几个向老师问了声好便聊了起...
    兲箜2001阅读 162评论 0 1