从文档:
int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
它只是看起来很复杂——同样的事情可以用一个函数来完成,或者不是?这个例子的真正意义是什么?
从文档:
int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
它只是看起来很复杂——同样的事情可以用一个函数来完成,或者不是?这个例子的真正意义是什么?
Blocks 的强大之处在于词法闭包(在 Python 或 C# 等语言中也称为 lambdas)。因此,你可以做
// within other code
int myVar;
int (^multiplyClosure)(int) = ^(int num1) {
return num1 * myVar;
};
然后,您可以传递此块,它将保留myVar
. 因此,闭包实际上是代码和上下文,其中蕴含着力量。
在这个特定的例子中,即使是一个函数也不合适,因为它是基本的算术。但是,该示例用于向您展示块的语法和调用约定。
块本身作为回调或“拖放代码”更有用。它们是一种进行委托和代码扩展的方法,无需构建有状态函数或委托类,也无需void *contextInfo
为每个回调提供无处不在的参数。
这个例子的重点是向您展示如何创建块以及它们可以做什么。这就像“hello world”示例,您几乎可以在每本书中找到它,但在实际应用程序中却没有。它只是为了说明一个概念。
块中没有同步问题。考虑到你是在多线程中做事,“Multiply”的两个参数是由其他线程共享的。它们不会被其他线程修改,因为它们处于“关闭”状态,因此您不需要锁定某事,它会使代码保持简单。