一芽狗、修飾類型區(qū)別
- 1、__weak只能在ARC模式下使用,也只能修飾對(duì)象(如:NSString),不能修飾基本數(shù)據(jù)類型(int)
- 2朋凉、__block不管是ARC還是MRC模式下都可以使用屋匕,可以修飾對(duì)象命雀,還可以修飾基本數(shù)據(jù)類型
二翔始、循環(huán)引用的問題
- 1、__weak 本身是可以避免循環(huán)引用的問題的撑螺,但是其會(huì)導(dǎo)致外部對(duì)象釋放了之后含思,block 內(nèi)部也訪問不到這個(gè)對(duì)象的問題,我們可以通過在 block 內(nèi)部聲明一個(gè) __strong 的變量來指向 weakObj甘晤,使外部對(duì)象既能在 block 內(nèi)部保持住含潘,又能避免循環(huán)引用的問題
- 2、__block 本身無法避免循環(huán)引用的問題线婚,但是我們可以通過在 block 內(nèi)部手動(dòng)把 blockObj 賦值為 nil 的方式來避免循環(huán)引用的問題
- 3遏弱、__block有一點(diǎn):這只是限制在ARC環(huán)境下。在非arc下塞弊,__block是可以避免引用循環(huán)的
三腾窝、__block與__weak功能上的區(qū)別
- 1缀踪、__block對(duì)象可以在block中被重新賦值,__weak不可以虹脯;__block可以讓block修改局部變量,__weak不能
- 2奏候、 __block 修飾的變量在 block 內(nèi)外都是唯一的循集,__block會(huì)持有該對(duì)象,即使超出了該對(duì)象的作用域蔗草,該對(duì)象還是會(huì)存在的咒彤,直到block對(duì)象從堆上銷毀;__weak僅僅是將該對(duì)象賦值給weak對(duì)象咒精,當(dāng)該對(duì)象銷毀時(shí)镶柱,weak對(duì)象將指向nil