block下循環(huán)引用的問(wèn)題
__block本身并不能避免循環(huán)引用,避免循環(huán)引用需要在block內(nèi)部把__block修飾的obj置為nil
__weak可以避免循環(huán)引用习劫,但是其會(huì)導(dǎo)致外部對(duì)象釋放了之后,block 內(nèi)部也訪問(wèn)不到這個(gè)對(duì)象的問(wèn)題,我們可以通過(guò)在 block 內(nèi)部聲明一個(gè) __strong的變量來(lái)指向 weakObj,使外部對(duì)象既能在 block 內(nèi)部保持住疚宇,又能避免循環(huán)引用的問(wèn)題
__block與__weak功能上的區(qū)別。
__block會(huì)持有該對(duì)象赏殃,即使超出了該對(duì)象的作用域,該對(duì)象還是會(huì)存在的间涵,直到block對(duì)象從堆上銷毀仁热;而__weak僅僅是將該對(duì)象賦值給weak對(duì)象,當(dāng)該對(duì)象銷毀時(shí)勾哩,weak對(duì)象將指向nil抗蠢;
__block可以讓block修改局部變量,而__weak不能思劳。
另外迅矛,MRC中__block是不會(huì)引起retain;但在ARC中__block則會(huì)引起retain潜叛。所以ARC中應(yīng)該使用__weak