[英]How much of the “Objective-C” I'm learning is universal Objective-C, and not Apple's frameworks?
[英]How much sense does this block make, in Objective-C?
从文档 :
int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
它看起来很复杂-可以用一个函数来完成同一件事吗? 在此示例中,真正的意义是什么?
Blocks的功能就是词汇闭包(在Python或C#等语言中也称为lambda)。 因此,您可以
// within other code
int myVar;
int (^multiplyClosure)(int) = ^(int num1) {
return num1 * myVar;
};
然后,您可以传递该块,它将保留myVar
的(副本)。 因此,闭包实际上是代码和上下文,其中蕴含着强大的力量。
在此特定示例中,即使是函数也是基本算法也不合适。 但是,该示例向您展示了块的语法和调用约定。
块本身作为回调或“拖放代码”更有用。 它们是一种进行委派和代码扩展的方法,而不必构建有状态的函数或委托类,也不必为每个回调提供无处不在的void *contextInfo
参数。
该示例的目的是向您展示如何创建块以及它们可以做什么。 这就像“ hello world”示例,几乎在每本书中都可以找到,但在实际应用中却找不到。 它只是用来说明一个概念。
块中没有同步问题。 考虑到您在多线程中运行,“ Multiply”的两个参数由其他线程共享。 由于它们处于“关闭”状态,因此不会被其他线程修改,因此您无需锁定sth,它将使代码保持简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.