//int a 就是参数列, return a*a; 就是行为主体,后面的小括号里面的5会被当成a的输入值 int result = ^(int a){return a*a;}(5); NSLog(@"---result...%d",result); //声明一个iBlock的Block指针,其所指向的Block有一个int类型得返回值和int类型得参数 int(^iBlock)(int); //将Block实体指定给iBlock iBlock = ^(int a){ return a+2;}; //调用 int bb = iBlock(10); NSLog(@"----bb....%d",bb); //cBlock在其主体中用到的outA这个常量值的时候做了一个copy的动作,把c的值copy下来 //所以,之后c即使换成了新的值,对于cBlock里面copy的值是没有影响的 //如果是static类型的常量就可以直接在block里面修改c的值 static int c = 5; int (^cBlock)(int) = ^(int ccc){c = 8;return ccc*c;}; NSLog(@"---c...%d",cBlock(2)); //如果是指针类型,可以直接在block里面修改 NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"one",@"two",@"three", nil]; //直接赋值a为2 int aarrr = ^(int a){[arr removeLastObject]; return a*a;}(2); NSLog(@"--aarrr...%d---arr...%@",aarrr,arr); //在某个变量前面如果加上修饰字“__block"(注意是两个下划线)的话 //也可以直接在block里面修改此变量的值 __block int v = 0; //调用vBlock赋值a为2 int (^vBlock)(int) = ^(int a){ v = 3; return a*v;}; NSLog(@"---abc...%d",vBlock(2));
//下面记录一下block得传值,a页面push到BTPushViewController页面 //BTPushViewController页面pop回a页面得时候将值传给a页面 //在BTPushViewController页面.h中声明一个块 typedef void (^myBlock)(int); //定义当前块的属性和方法 @property (nonatomic,assign)myBlock senBlock; -(void)returnBlock:(myBlock)senderBlocks; //BTPushViewController页面得.m中 -(void)returnBlock:(myBlock)senderBlocks { self.senBlock = senderBlocks; } //返回按钮 - (void)navLeftBtnAction:(UIButton *)btn { //用block进行传值 if (self.senBlock) { self.senBlock(15); } [self.navigationController popViewControllerAnimated:YES]; } //在a页面push到BTPushViewController页面得跳转方法里面这样写 -(void)doButton { BTPushViewController *pushs = [[BTPushViewController alloc] init]; pushs.senBlock = ^(int a) { NSLog(@"--------block传值%d",a); }; [self.navigationController pushViewController:pushs animated:YES]; }