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属性有所帮助!