一 : __weak 與 __unsafe_unretained

內(nèi)存圖

解決方式 : __weak
typeof(perosn) 與上面相同,編譯器特性.

內(nèi)存圖

解決方式 : __unsafe_unretained

內(nèi)存圖 與weak一樣
二 : __weak 與 __unsafe_unretained 區(qū)別
__weak :
引用的對象掛掉,其指針置為nil

____unsafe_unretained:
還存在掛掉對象的地址,訪問后會產(chǎn)生野指針.
三 :__block解決循環(huán)引用問題

源碼

內(nèi)存結(jié)構(gòu)圖
weakSelf 相當(dāng)于 __block_byref_person這個結(jié)構(gòu)體變量的 person置為nill,循環(huán)鏈條斷裂,彼此不再循環(huán)引用.

四: MRC下
解決循環(huán)引用問題
MRC下__Block_byref結(jié)構(gòu)體對象不會對里面的person進行強引用.是弱引用

MRC 不支持__weak,所有有兩種解決方案

保證編譯通過,確保在使用person時,不會掛掉
