阻止与代表

时间:2012-11-16 17:48:28

标签: objective-c delegates objective-c-blocks

  

可能重复:
  Do code blocks completely replace delegates?

我刚从论坛中遇到以下声明:

  

“代表是过去。阻碍是未来。”

1)阻止首选方式对代表执行'委托'职责吗?
2)使用委托与块有什么特别的好处吗?

1 个答案:

答案 0 :(得分:25)

我认为代表们做什么以及阻止做什么会有轻微的误解。

在Objective-C中,有三种方法可以处理回调:

  1. 代表团 - >如果您将一个对象设置为另一个对象的委托,则必须指定委托对象将响应的“父”对象生成的事件类型。

  2. 目标行动 - >典型的UI交互,其中UI子视图(按钮,滑块等)基于某些用户输入(例如触摸/点击)生成事件,该事件由预定义的事件处理程序处理(通常是开发人员的一些Objective-C方法)指定)。

  3. 通知 - >其中一个对象用NSNotificationCenter的实例注册自己,以“监听”任何类型的事件,并响应这些事件中的一个或多个。

  4. 块本身不是处理委派或任何其他回调的方法。

    它们是自包含的代码片段,可以访问调用方法的局部变量和参数。它们可用于在一堆不同的上下文中定义行为。块(我认为)的主要好处是它可以通过消除使代码库混乱的无关过度特定的方法来简化代码。块有助于将代码本地化到最有意义的地方:就在回调机制中。

    基本上,使用它们可以提高可读性并使代码更易于维护。

    这些好处是否会使块成为处理回调的“首选”方法,这绝对是个人观点和经验的问题。 ;)