关于block循环引用

如果在block中使用附有__strong修饰符的对象类型自动变量,那么当block从栈区拷贝到堆区时,该对象为block所持有。这样容易引起循环引用.

__block,__weak和__unsafe_unretained都可避免循环引用,可他们有何不同呢?

使用__block的优点如下:

通过__block变量控制对象的持有期间,再不能使用__weak修饰符的环境中不使用__unsafe_unretained的修饰符即可.(不必担心悬垂指针)

在执行block时可动态性的决定是否将nil或其他的对象赋值在__block变量中

使用__block的缺点如下:

为避免循环引用必须执行block

在执行了block语法,却不执行block的路径时,无法避免循环引用。若由于block引发的循环引用时,根据block的用途选择使用__block变量,__weak修饰符或者__unsafe_unretained修饰符来避免循环引用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容