定义方式 (推荐 结构比较清晰)
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);
}
-(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);
}
{
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);
}
}];
[_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] 还是老子,怎么的
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] 还是老子,怎么的