block循环引用

前提ARC:

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

解决方案:根据Block的用途选择使用__block变量,__weak 修饰符或者__unsafe_unretained修饰符来避免循环引用。

下面做一个比较:
使用__block变量的优点如下:

  • 通过__block变量可控制对象的持有期间
  • 在不使用__weak修饰符的环境中不使用__unsafe_unretained修饰符即可
    在执行Block时可动态决定是否将nil或其他对象赋值在__block变量中。

使用__block变量的缺点如下:
为避免循环引用,必须执行Block.

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

推荐阅读更多精彩内容