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的过程。

你可能感兴趣的:(Notifications vs Delegates)