block循環(huán)引用原因:一個對象A有Block類型的屬性炕置,從而持有這個block辩涝,如果block的代碼塊中使用到這個對象A吏够,或者僅僅是用用到A對象的屬性推正,會使block也持有A對象,導(dǎo)致兩者互相持有缸濒,不能在作用域結(jié)束后正常釋放足丢。
解決原理:對象A照常持有Block元镀,但Block不能強引用持有對象A以打破循環(huán)。
解決方法:
方法一:?對block內(nèi)要使用的對象A使用_*_weak*進行修飾霎桅,block對對象A弱引用打破循環(huán)栖疑。
方法二:對block內(nèi)要使用的對象A使用__block進行修飾,并在代碼塊內(nèi)滔驶,使用完__block變量后將其設(shè)為nil遇革,并且該block必須至少執(zhí)行一次
方法三:將在block內(nèi)要使用到的對象(一般為self對象),以block參數(shù)的形式傳入揭糕,block就不會捕獲該對象萝快,而將其作為參數(shù)使用,其生命周期系統(tǒng)的棧自動管理著角,不造成內(nèi)存泄露揪漩。