关于block,delegate,notification

yuan 发布于 2014年04月02日
无人欣赏。

我开发时候经常用到block,delegate,notification来进行类之间的通信,或是回调。但是不太清楚到什么时候用block好,什么时候用delegate何时,什么时候该用notification。在我的代码里这三种形式都可以互换,这应该是不好的吧,没有发挥出他们各自的优势。

来讨论讨论吧,大家都是怎么用的

共9条回复
zhangmeteor 回复于 2014年04月02日

看感觉。。。。我一般都这么干

liuchendi 回复于 2014年04月02日

1、通知可以实现一对一,一对多的通信,但是通知可读性差,对于日后的维护可能是个灾难,万不得已的情况下我才会选择通知。

2、delegate,有严格的定义格式,ios里面很大一部分是delegate实现的,一对一的关系,能够在代码中跟踪,有利于维护

3、block, 与delegate类似,阅读性好,block能实现的东西delegate也一样能实现,你看看GCD就知道他有多强大了。

个人觉得,没有好与不好之分,适当的时间选择适当的用法有助于开发,这东西没有绝对的,存在即合理~~

yuan 回复于 2014年04月02日

2楼 @liuchendi 领教了,多谢,得深入研究研究GCD了

yuan 回复于 2014年04月02日

2楼 @liuchendi 是啊,我以前就喜欢用通知,一个viewcontroller绑定好几个通知,维护起来特麻烦

liuchendi 回复于 2014年04月02日

4楼 @yuan 切记一个viewcontroller不要绑定几个通知,大忌!! 想当年我也是这么过来的,后来被BS后就渐渐放弃了。。

yuan 回复于 2014年04月02日

5楼 @liuchendi 哦!那现在果断放弃

iimgal 回复于 2014年04月02日

不知道为什么这么多人反对用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用起来方便, 定义起来也不方便)

zhangmeteor 回复于 2014年04月02日

notification没什么不好得,自己多用define,写的有条理点没什么问题

yuan 回复于 2014年04月03日

7楼 @iimgal 这么一说,一对多通信时,还是通知方便啊

登录 或者 注册