OC中的Block属性

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

        Block与其余对象的内存管理类似,但又有些不一样,当一个block被建立,它是在栈区中,那意味着当block中的代码执行完毕以后,这段代码就再也不合法,会被系统清理掉,因此为了让block存活时间更长,须要将其copy到堆区中。这样作也有一个缺点:若是block代码块中要用到强指针,基本多会用__weak和_unsafe_unretained转换再使用,不然会引发循环保留,内存得不到释放。atom

        因此咱们在定义一个类的block属性时,通常是这样spa

首先,定义block代理

typedef void (^BLWebViewProgressBlock)(float progress);指针


而后,定义类的block属性对象

@property (nonatomic, copy) BLWebViewProgressBlock progressBlock;内存


        但愿对你们理解block属性有所帮助!内存管理