Block 传值

返回值是int类型  求两个数的和的block
int (^block)(int, int) = ^int (int a, int b){
        return a + b;
    };
  NSLog(@"%d",block(3,5));

给block起别名
typedef int(^WLBlock)(int a, int b);

用别名申明一个block
WLBlock newBlock = ^int(int a, int b){       
     return a * b;   
};   
//  调用   
NSLog(@"%d",newBlock(3,5));


block传值
将第二个界面值传到第一个界面


在需要传值界面
//  声明block变量
@property (nonatomic, copy) PassByValue passValueBlock;
//  返回上个界面的方法
- (void)back:(UIBarButtonItem *)barButton{
    // 调用block进行传值
    self.passValueBlock(@"传值");
    [self.navigationController popViewControllerAnimated:YES];

}

在接收值的界面
//  去下个界面的值的方法
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.passValueBlock = ^void(NSString *str){

        self.navigationItem.title = str;

    };
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];


解决block循环引用
//  解决Block循环引用的方法
//  相当于 block块中 引用计数会被加一  
//  加上__block修饰后 有一个引用计数减1的操作   
//  ARC状态下使用__weak   
//  MRC状态下使用__block
   
// 需要用__block修饰一下self来解决问题   
     __block SecondViewController *myself = self;
  
     //  block的实现   
     view.block = ^void(){       
            [myself.navigationController popViewControllerAnimated:YES];                          NSLog(@"我来到了secondVC中");   
     };


block释放(dealloc方法)

- (void)dealloc{   
       Block_release(_passValueBlock);     
       NSLog(@"我是secondVC,我被释放了");   
       [super dealloc];
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值