Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在Objective-C中,这个区块有多大意义?_Iphone_Objective C_Block - Fatal编程技术网

Iphone 在Objective-C中,这个区块有多大意义?

Iphone 在Objective-C中,这个区块有多大意义?,iphone,objective-c,block,Iphone,Objective C,Block,从: 它看起来很复杂——同样的事情可以用函数来完成,还是不用?本例的真正意义是什么?本例的目的是向您展示如何创建块以及它们可以做什么。这就像“hello world”的例子,你几乎可以在每本书中找到,但在实际应用中却找不到。它只是用来说明一个概念 在这个特定的例子中,即使是函数也不合适,因为它是基本的算术运算。但是,该示例将向您展示块的语法和调用约定 块本身作为回调或“拖放代码”更为有用。它们是一种进行委托和代码扩展的方法,而不必构建有状态函数或委托类,也不必为每个回调提供无处不在的void*c

从:


它看起来很复杂——同样的事情可以用函数来完成,还是不用?本例的真正意义是什么?

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

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


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

块的功能就像词法闭包一样(在Python或C#等语言中也称为lambdas)

// within other code

int myVar;

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

然后,您可以传递此块,它将保留一个(副本)的
myVar
。因此,闭包实际上是代码和上下文,其威力就在于此。

块中没有同步问题。考虑到您是在多线程中做事情,“Multiply”的两个参数被其他线程共享。它们不会被其他线程修改,因为它们处于“闭包”状态,所以您不需要锁定某个线程,这样代码就简单了

// within other code

int myVar;

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