初探block


 近期看了几个项目中都有用到block,仔细看了看觉得block在传递参数和回调方面非常的好用。特总结写出一篇博客,有不对的地方欢迎大家指正。

1.首先在类A.h中声明一个block,因为要在外部使用,所有可以直接copy声明

@property (copy,nonatomic)void(^BlockType)(BOOL success,BOOL cancle);

alloc 一个A的对象 a,然后调用

 [a setBlockType:^(BOOL success, BOOL cancle) {
        if (success&&cancle) {
            NSLog(@"回调block传递参数成功");
        }
    }];

A.m里面只要调用

 BlockType(YES,YES);

你就会看到输出结果了

2.这里再写点关于block的内存管理方面的东西

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。比如下面的例子。

typedef void(^BlockCC)(void);
BlockCC _block;

- (void)viewDidLoad
{
 [superviewDidLoad];
 
 int number = 1;
_block = ^(){
 
 NSLog(@"number %d", number);
};
}
- (IBAction)buttonDidClick:(id)sender {
_block();
}
我一点击按钮,项目就崩溃了,修改代码如下

_block = ^(){
 
 NSLog(@"number %d", number);
};
_block = [_block copy]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值