先来复习下如何定义一个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;
- - (void)textBlock:( void (^)(int) )block
- {
- block(3);
- }
- [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];
- }