block 初探 关于block的用法

时间:2022-07-14 19:03:36

定义方式 (推荐 结构比较清晰) 

typedef void (^BoolBlock)(BOOL); //一个只接受一个BOOL参数 没有返回值的block
typedef int (^IntBlock)(void); //一个没有参数 返回INT 型的blcok
typedef BoolBlock (^HugeBlock)(IntBlock); //看看,这个HugeBlock的参数和返回值都是block
typedef void (^paremeterBlock)(NSArray * array,NSError * error); //定义一个block用来传值



1、作为类成员
 @property (nonatomic,copy) BoolBlock block;  //作为类成员
2、作为参数
  
 //作为参数返回
-(BoolBlock) otherMethod;
{
    BoolBlock ablock = ^(BOOL value){
        NSLog(@"第二个block");
    };
    return [ablock copy];
}

//block作为函数参数传递

- (void) parameter:(void(^)(NSArray * array,NSError * error))ablock;
{
    NSArray * array = [NSArray arrayWithObjects:@"老子返回的",@"还是老子,怎么的", nil];
    NSError * error;
    ablock(array,error);
}

或者还可以这么写:
- (void) parameter:(paremerterBlock)ablock;
{
    NSArray * array = [NSArray arrayWithObjects:@"老子返回的",@"还是老子,怎么的", nil];
    NSError * error;
    ablock(array,error);
}

使用block能够起到和delegate一样的效果 避免了delegate在两个类来回跳着写代码


开始调用
_bClass = [[blockClass alloc] init];
    [_bClass someMethod];
   BoolBlock block = [_bClass otherMethod];
    BOOL yes;
    block(yes);
    [_bClass parameter:^(NSArray *array,NSError *error){
        //NSLog(@"array = %@",array);
        for (id object in array) {
            NSLog(@"%@",object);
        }
    }];


好了 最后结果出来了^-^!!

 2014-05-10 13:36:26.432 AnimationDemo[847:c07] Bool Block!
2014-05-10 13:36:26.433 AnimationDemo[847:c07] 第二个block
2014-05-10 13:36:26.434 AnimationDemo[847:c07] 老子返回的
2014-05-10 13:36:26.434 AnimationDemo[847:c07] 还是老子,怎么的