OC中的Block属性

        Block是苹果极力推荐使用的一个知识点,它的简单实用使其在最近几年变的特别流行,尤其是在不同类之间传值的时候,比通过代理实现要方便得多。OC中的block可以借助C中的函数指针来理解,原理基本类似,不过block的功能非常强大,需要在使用的过程中慢慢体会。那么对于一个类的block属性,我们要用什么样的关键字呢?assign,copy还是retain?

        Block与其他对象的内存管理相似,但又有些不同,当一个block被创建,它是在栈区中,那意味着当block中的代码执行完毕之后,这段代码就不再合法,会被系统清理掉,所以为了让block存活时间更长,需要将其copy到堆区中。这样做也有一个缺点:如果block代码块中要用到强指针,基本多会用__weak和_unsafe_unretained转换再使用,否则会引起循环保留,内存得不到释放。

        所以我们在定义一个类的block属性时,一般是这样

首先,定义block

typedef void (^BLWebViewProgressBlock)(float progress);


然后,定义类的block属性

@property (nonatomic, copy) BLWebViewProgressBlock progressBlock;


        希望对大家理解block属性有所帮助!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值