平时代码都比较少用到Block,总是认为看起来很变扭。
但是个人认为在页面需要返回值的时候,使用Block很不错,简化掉protocol,直接使用Block代替。
小例子:
FirstViewController:
SecondViewController* secondVC=[[SecondViewController alloc]init];
[secondVC handlerEvent:^(UIColor * color) {
[btn setBackgroundColor:color];
}];
[self.navigationController pushViewController:secondVC animated:YES];
SecondViewController:
.h声明
-(void)handlerEvent:(void(^)(UIColor*)) event;
.m文件
声明一个block,用于保存event方法的内容。参数必须保持一致:
void (^simpleBlock)(UIColor *);
//保存event方法到simpleBlock
-(void)handlerEvent:(void (^)(UIColor *))event
{
simpleBlock=event;
}
事件触发调用该方法
-(void)btnClick:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
simpleBlock([UIColor grayColor]);
}
这样的处理过程如果用其他方式进行数据回传的话,一般情况下是用protocol。
但是用Block则简化了代码。其他地方也是可以举一反三。