objective-c - block 与委托(delegate)

标签 objective-c delegates objective-c-blocks

<分区>

Possible Duplicate:
Do code blocks completely replace delegates?

我刚刚在论坛上遇到了以下声明:

"Delegates is the past. Blocks are the future."

1) block 是首选方式来对委托(delegate)执行“委托(delegate)”职责吗?
2) 使用委托(delegate)与使用 block 有什么特别的好处吗?

最佳答案

我认为委托(delegate)人做什么和 block 做什么有一点误解。

在 Objective-C 中,处理回调的方式有以下三种:

  1. 委托(delegate) -> 使一个对象成为另一个对象的委托(delegate),并且您必须指定委托(delegate)对象将响应“父”对象生成的哪些类型的事件。

  2. Target-Action -> 典型的 UI 交互,其中 UI subview (按钮、 slider 等)根据某些用户输入(例如触摸/点击)生成一个事件,该事件由预定义事件处理处理程序(通常是开发人员指定的一些 Objective-C 方法)。

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

block 本身并不是处理委托(delegate)或任何其他回调的方法。

它们是独立的代码片段,可以访问调用方法的局部变量和参数。它们可用于定义一堆不同上下文中的行为。 block 的主要好处(如我所见)是它可以通过消除会使代码库困惑的无关的过于具体的方法来简化代码。 block 有助于将代码本地化到最有意义的地方:就在回调机制中。

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

这些好处是否使 block 成为处理回调的“首选”方法绝对是个人意见和经验的问题。 ;)

关于objective-c - block 与委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421803/

相关文章:

objective-c - 如何测试 Objective-C 类以确定它是否响应静态选择器(类方法)?

objective-c - 如何扩展基于私有(private)方法的类方法

objective-c - 我应该在调度 block 中使用 "weakSelf"吗?

ios - 不兼容的 block 指针 SKSpriteNode

objective-c - 在数组中搜索 NSRange 的字符串

iphone - 从脚本将文件添加到 xcode 项目

ios - NSBlock 的访问限定符是复制还是弱还是强?

ios - 正确设置委托(delegate)

c# - 订阅者方法不需要创建委托(delegate)实例?

macos - NSOpenPanel 的 beginWithCompletionHandler block