我开发时候经常用到block,delegate,notification来进行类之间的通信,或是回调。但是不太清楚到什么时候用block好,什么时候用delegate何时,什么时候该用notification。在我的代码里这三种形式都可以互换,这应该是不好的吧,没有发挥出他们各自的优势。
来讨论讨论吧,大家都是怎么用的
1、通知可以实现一对一,一对多的通信,但是通知可读性差,对于日后的维护可能是个灾难,万不得已的情况下我才会选择通知。
2、delegate,有严格的定义格式,ios里面很大一部分是delegate实现的,一对一的关系,能够在代码中跟踪,有利于维护
3、block, 与delegate类似,阅读性好,block能实现的东西delegate也一样能实现,你看看GCD就知道他有多强大了。
个人觉得,没有好与不好之分,适当的时间选择适当的用法有助于开发,这东西没有绝对的,存在即合理~~
不知道为什么这么多人反对用Notification, 在1对多通信的情况下肯定是Notification最方便. 另外在斯坦福的教程里对iOS的MVC讲解时,也是建议Model层与Controller层的通信使用Notification. 4.0之后Notification也提供了Block的方式接收通知, 代码的维护和可读性不比Delegate差. 唯一要注意的是在类释放时要把Notification注销掉, 以免重复注册.
Block无疑是最方便的, 有Block的API就别用Delegate的了.
Delegate的定义和使用都不方便, 造成了代码分散可读性差, 但是很多人习惯了用它, 也没什么问题.
总的来说, 我的习惯是: 1. 1对多, 用Notification (如登陆, 注销这类几乎所有页面都需要响应的事件) 2. 1对1, 系统API或第三方API, 有Block的用Block, 没有当然用Delegate了; 自己定义的API随意.(因为Block用起来方便, 定义起来也不方便)