关于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修饰符来避免循环引用。

你可能感兴趣的:(关于block循环引用)