刚开始接触block的时候感觉很迷茫,这样怪异的语法让我摸不着头脑,硬着头皮去尝试消化这种新语法,发现记住了过了几天又忘了,反反复复。这次痛下决心想要彻底弄会block的常用用法,所以记录一下。
简书上对block的用途是这样说的:Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。
两种用途:1.两个界面之间传值(有点类似代理,其实block就是为取代代理而生的,哈哈);2.封装代码段当做参数使用。
第一种:假设一种场景:B界面需要传值给A界面,我们需要这么做:首先在B界面定义一个block :
typedef void(^changeColor)(id);
申明block变量
@property(nonatomic,copy) changeColor change;
然后再需要.m界面使用这个属性:
-(IBAction)back:(id)sender{
UIColor * color = [UIColor redColor];
self.change(color);
}
在A界面需要调用B的block函数:
-(IBAction)nextPage:(id)sender{
BViewController * bview = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
//实现BviewController属性change的内容
//当BviewController 调用change的时候会执行回调函数
bview.change = ^(UIColor * color){
self.view.backgroundColor = color;
};
[self.navigationController pushViewController:bview animated:YES];
}
-(void)Block:(void(^)(UIColor *))block;
.m文件实现此方法
-(void)Block:(void(^)(UIColor *))block{
block([UIColor redColor]);
}
然后就是A类调用此方法了:
bview.change = ^(UIColor * color){
self.view.backgroundColor = color;
};
以上就是我对block简单使用的肤浅理解,希望大神多多指正,感激不尽。