[TwistedFate]Block

Block

C语言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];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值