Block对象是一个c-level的语法和运行时的功能。和C的函数很相似,但是执行代码的时候,but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory。A block can therefore maintain a set of state (data) that it can use to impact behavior when executed.
block最有用的是用来当作callback,因为block包含了回调中要执行的代码和执行时所需的data
声明一个block并使用他:
int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
return num * multiplier;
};
printf("%d", myBlock(3));
// prints "21"
block直接是qsort_b()的参数
char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" };
qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) {
char *left = *(char **)l;
char *right = *(char **)r;
return strncmp(left, right, 1);
});
// myCharacters is now { "Charles Condomine", "George", "TomJohn" }<strong>
</strong>