由于我正在学习Objective-C,我的理解还比较新而且不完整。块(block)的概念非常类似于函数(function),它们甚至看起来几乎相同:
函数名为 'multiply'
#import <Foundation/Foundation.h>
int multiply (int x, int y)
{
return x * y;
}
int main(int argc, char *argv[]) {
@autoreleasepool {
int result = multiply(7, 4); // Result is 28.
NSLog(@"this is the result %u",result);
}
}
名为“Multiply”的块
#import <Foundation/Foundation.h>
int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int main(int argc, char *argv[]) {
@autoreleasepool {
int result = Multiply(7, 4); // Result is 28.
NSLog(@"this is the result %u",result);
}
}
我在网上发现了各种关于块的声明,如下: “块被实现为Objective-C对象,但它们可以放在堆栈上,所以它们不一定需要被malloc(如果你保留一个块的引用,它将被复制到堆上)。" Ray Wenderlich说道: “块是一流函数”
我完全不知道这些话的意思。我的例子展示了块和函数完成相同的事情。有人能举个例子说明块可以做些函数不能做的事情吗?还是反过来呢?或者这是更微妙的东西,比如变量“result”在内存中的处理方式?或者哪个更快/更安全?它们中的任何一个都可以在类定义中用作方法吗?
谢谢。