Block这渣渣,对于刚写IOS的人,肯定都是有很多疑惑的,我们先来说明Block的语法及用例。
  1.定义一个Block
  int num1 = 2;
  定义一个名为myBlock,返回值为int参数为空的 block
int (^myBlock)(void) = ^(void) {
return 10;
};
myBlock();
int (^myBlock1)(int) = ^(int num){
return num * 10;
};
myBlock1(num1);
void (^myBlock2)(int,int) = ^(int num1,int num2){
NSLog(@"num1 is : %d  num2 is : %d ",num1,num2);
};
myBlock2(num1,100);
  2.把block当做参数
  -(void) addPullToRefreshBlock:(void(^)(void))block {
  _cardTableView.mj_header = [MyMJHeader headerWithRefreshingBlock:^{
  block();
  }];
  }
  3.把block当做返回值
  - (void (^)(void)) method;
  4.typedef block
  typedef void (^BoolBlock)(BOOL);//一个只接受一个BOOL参数,没有返回值的block
  typedef int (^IntBlock)(void);//一个没有参数,返回int的block
  typedef BoolBlock (^HugeBlock)(IntBlock);//看看,这个HugeBlock的参数和返回值都是block
  同样,利用typedef后的 block 类型,可以简化上面各种写法
  例如:
  block参数
  -(void) addPullToRefreshBlock:RefreshBlock block{
  //code
  }
  返回block
  -(BoolBlock) method;
  5.类的成员变量
  利用上面的 typedef后的类型
  @property (copy,nonatomic) BoolBlock myBlock;
  6.全局block
static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};
int main()
{
printf("%d ", maxIntBlock(2,10));
return 0;
}
  7.__block
  如果要在block内修改block外声明的栈变量,那么一定要对该变量加__block标记
int main()
{
__block int i = 1024;
BoolBlock bBlock = ^(BOOL bV) {
if (bV) {
i++;//如果没有__block标记,是无法通过编译的。
}
};
}