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;
};