1.2直接使用Block
在很多情况下,你不需要声明一个 block 变量;相反你可以简单的写一个内联(inline)的block 文本,它需要作为一个参数使用。以下的代码使用qsort_b 函数。qsort_b和标准 qsort_r函数类似,但是它使用 block作为最后一个参数。
char *myCharacters[3] = {"TomJohn", "George","Charles Condomine" };
qsort_b(myCharacters,3, sizeof(char *), ^(constvoid *l, constvoid *r) {
char *left = *(char **)l;
char *right = *(char **)r;
returnstrncmp(left, right, 1);
});
// myCharacters is now { "Charles Condomine", "George", "TomJohn" }
1.3 Cocoa的Blocks
在 Cocoa frameworks里面有部分方法使用 block作为参数,通常不是执行一个对象的集合操作,就是在操作完成的时候作为回调使用。下面的例子显示了如何通过NSArray的方法 sortedArrayUsingComparator:使用block。该方法使用一个参数,即block。为了举例说明,该情况下block 被定义为NSComparator 的局部变量:
NSArray *stringsArray = [NSArrayarrayWithObjects:
@"string 1",
@"String 21",
@"string 12",
@"String 11",
@"String 02",nil];
staticNSStringCompareOptions comparisonOptions =NSCaseInsensitiveSearch |NSNumericSearch |
NSWidthInsensitiveSearch |NSForcedOrderingSearch;
NSComparator finderSortBlock = ^(id string1,id string2) {
NSRange string1Range =NSMakeRange(0, [string1length]);
return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
};
NSArray *finderSortArray = [stringsArraysortedArrayUsingComparator:finderSortBlock];
NSLog(@"finderSortArray: %@", finderSortArray);
/*
Output:
finderSortArray: (
"string 1",
"String 02",
"String 11",
"string 12",
"String 21"
)*/