如果在block中使用附有__strong修飾符的對象類型自動變量,那么當block從棧區(qū)拷貝到堆區(qū)時,該對象為block所持有。這樣容易引起循環(huán)引用.
__block,__weak和__unsafe_unretained都可避免循環(huán)引用,可他們有何不同呢?
使用__block的優(yōu)點如下:
通過__block變量控制對象的持有期間,再不能使用__weak修飾符的環(huán)境中不使用__unsafe_unretained的修飾符即可.(不必擔心懸垂指針)
在執(zhí)行block時可動態(tài)性的決定是否將nil或其他的對象賦值在__block變量中
使用__block的缺點如下:
為避免循環(huán)引用必須執(zhí)行block
在執(zhí)行了block語法,卻不執(zhí)行block的路徑時,無法避免循環(huán)引用。若由于block引發(fā)的循環(huán)引用時,根據(jù)block的用途選擇使用__block變量,__weak修飾符或者__unsafe_unretained修飾符來避免循環(huán)引用。