这两者都能实现在不同的类之间传递参数及事件,但是用通知中心很难把握应用的执行流程。UserInfo dictionaries的keys到处传递导致失去了同步,而且在公共空间需要定义太多的常量。对于一个工作于现有的项目的开发者来说,如果过分的使用通知中心,那么很难理解应用的流程,所以我觉的一个命名好的协议以及协议方法定义,对于清晰的理解类间的通信是很容易的,协议发生改变以及实现都可通过编译器检查出来,这样大大降低了程序crash的机会.当然会有delegation模式不适合的例外情况出现,而且notification可能更加有效。例如:应用中大多数的类需要知道一个事件。然而这些类型的场景很少出现。另外一个例子是当你建立了一个架构而且需要通知该事件给正在运行中应用。所以大多数情况下建议使用delegate


经过一段时间的使用之后感觉有些不同了,好像用代理的情况有时候复杂度并不比用通知来的低,比如在一个vc中调用另外一个带有view的类,之后这个类又再调用第三个带有view的类,此时第三个类如果需要刷新最顶级的view的一些信息是就必须调用两级的代理协议方法,类似情况多的话也会造成混乱,这时候如果用通知能更加清晰的解决问题.


又过了一阵子,我发现kvo在解决模型变化,视图跟着刷新时非常好用.

最后我重新总结了一下代理,kvo和通知的大致使用范围

1.如果数据源(对象)的数据有变化,用kvo监听的方式来对view做相应的变化
2.如果当前的对象要完成某个方法,在另一个对象中完成更合适或者已经实现了,用代理.
3.如果数据源,视图变化时,涉及多个对象需要做出调整时用通知.

这样逻辑能清晰很多,最大的一个好处是,你开始做界面的时候可以完全不管数据,全部用默认的数据来显示,而上线的时候不用任何调整,只要在收到数据源变化的通知是改变一下view就行了

原创文章,转载请注明出处,谢谢!