int multiplier = 7;
int/*myBlock是块对象,返回整型值。*/ (^myBlock)/*^符号将myBlock声明为一个块对象*/(int)/*它有一个参数,参数的类型也是整型值*/ =/*这是块对象的主体部分*/ ^(int num)/*参数名称是num*/{/*这是定义块对象的语法结构。这部分就是赋给myBlock变量的值。*/
return num * multiplier;
};
int result = myBlock(4);
DLog(@"result is %d",result);
// self.view.transform = CGAffineTransformMakeRotation(M_1_PI);
/*
参数是NSString *的代码块
*/
void (^printBlock)(NSString * x);
printBlock = ^(NSString * str)
{
NSLog(@"print:%@",str);
};
printBlock(@"hello world!");
/*
代码用在字符串数组排序
*/
NSArray * stringArray = [NSArray arrayWithObjects:@"abc 1",@"abc 21",@"abc 12",@"abc 13",nil];
NSComparator sortBlock = ^(id string1, id string2){
return [string1 compare:string2];
};
NSArray * sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
NSLog(@"sortArray:%@",sortArray);
/*
代码块的递归调用
*/
static void (^ const blocks)(int) = ^(int i){
if (i > 0) {
NSLog(@"num:%d",i);
blocks(i-1);
}
};
blocks(3);
/*
在代码块中使用局部变量和全局变量
*/
void(^block)(void) = ^(void)
{
global++;
NSLog(@"global %d",global);
};
block();
NSLog(@"global:%d",global);
__block int local = 500;
void(^block1)(void) = ^(void)
{
local++;
NSLog(@"local:%d",local);
};
block1();
NSLog(@"local:%d",local);
NSArray * cards = [NSArray arrayWithObjects:@"Jack",@"Queen",@"King",@"Ace", nil];
[cards enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@ card at index %d",obj,idx);
}];
void (^now)(void) = ^{
NSDate * date = [NSDate date];
NSLog(@"The date and time is %@",date);
};
now();
int (^multiply)(int,int) = ^(int x,int y){
return x * y;
};
NSLog(@"multiply is %d",multiply(2,3));
int (^tripler)(int) = ^(int number) {
return number * 3;
};
typedef int (^ComputationBlock)(int);
[GigaHomeViewController iterateFromOneTo:5 withBlock:tripler];
+ (void)iterateFromOneTo:(int)limit withBlock:(int (^)(int))block {
for (int i = 1; i <= limit; i++) {
int result = block(i);
NSLog(@"iteration %d => %d", i, result);
}
}