0

文档

int (^Multiply)(int, int) = ^(int num1, int num2) {
    return num1 * num2;
};
int result = Multiply(7, 4); // result is 28

它只是看起来很复杂——同样的事情可以用一个函数来完成,或者不是?这个例子的真正意义是什么?

4

4 回答 4

8

Blocks 的强大之处在于词法闭包(在 Python 或 C# 等语言中也称为 lambdas)。因此,你可以做

// within other code

int myVar;

int (^multiplyClosure)(int) = ^(int num1) {
    return num1 * myVar;
};

然后,您可以传递块,它将保留myVar. 因此,闭包实际上是代码上下文,其中蕴含着力量。

于 2010-09-20T21:10:16.277 回答
4

在这个特定的例子中,即使是一个函数也不合适,因为它是基本的算术。但是,该示例用于向您展示块的语法和调用约定。

块本身作为回调或“拖放代码”更有用。它们是一种进行委托和代码扩展的方法,无需构建有状态函数或委托类,也无需void *contextInfo为每个回调提供无处不在的参数。

于 2010-09-20T20:54:42.350 回答
2

这个例子的重点是向您展示如何创建块以及它们可以做什么。这就像“hello world”示例,您几乎可以在每本书中找到它,但在实际应用程序中却没有。它只是为了说明一个概念。

于 2010-09-20T20:51:35.443 回答
1

块中没有同步问题。考虑到你是在多线程中做事,“Multiply”的两个参数是由其他线程共享的。它们不会被其他线程修改,因为它们处于“关闭”状态,因此您不需要锁定某事,它会使代码保持简单。

于 2010-09-21T01:55:40.563 回答