先来复习下如何定义一个block
返回值 (^block名)(参数列表) = ^(参数列表){
};
例如:
// block的写法
//定义block
void (^block)(int) = ^(int a){
NSLog(@"%d", a);
};
如何使用block:
block名(参数);
例如:
// block的写法
//定义block
void (^block)(int) = ^(int a){
NSLog(@"%d", a);
};
// block的使用(执行block中的代码)
block(10);
// 可以给同类型的block类型赋值
void (^block1)(int) = block;
函数中参数为block类型
- (void)textBlock:( void (^)(int) )block
{
block(3);
}
调用含有block类型的参数的方法
[self textBlock:block];
临时定义一个block参数
[self textBlock:^(int a) {
NSLog(@"%d", a);
}];
使用重定义快速定义一个block
// 把void(^)(int) 类型重定义为BLOCK
typedef void(^BLOCK)(int);
// 利用新定义的BLOCK变量 定义
BLOCK b = ^(int a ){
NSLog(@"%d", a);
};
现在来讲如何利用block传值
第一步:
// 在第一个页面中定义一个block 确定需要进行的操作
void (^changeColorBlock)(UIColor *color) = ^(UIColor *color) {
// 改变颜色
[self.view setBackgroundColor:color];
};
第二步:
在第二个页面类中声明一个属性
// 重定义一个Block类型
typedef void(^BL)(UIColor *color);
//定义一个block属性 一定要用copy属性
@property (nonatomic, copy) BL block;
第三步:
给第二个页面的block赋值
secondVC.block = changeColorBlock;
第四步:
在第二个界面中比如说按了一个按钮,把值传回到第一个界面类中
- (void) btnClick:(UIButton *)btn
{
self.block([UIColor orangeColor]);
[self.navigationController popViewControllerAnimated:YES];
}
内存管理:
-(void)dealloc
{
Block_release(_block);
[super dealloc];
}