image.png
1辛掠、什么是block
Block 是將函數(shù)及其執(zhí)行上下文封裝起來的對象
2谢谦、block截獲對象
image.png
a、對于基本數(shù)據(jù)類型的局部變量截獲其值萝衩。
b回挽、對于對象類型的局部變量連同所有權(quán)修飾符一起截獲。
c猩谊、以指針形式截獲局部靜態(tài)變量千劈。
d、不截獲全局變量牌捷、靜態(tài)全局變量.
3墙牌、在什么情況下需要使用__block修飾符?
一般情況下暗甥,對被截獲變量進(jìn)行賦值操作需要使用__block
image.png
image.png
image.png
image.png
image.png
image.png
4喜滨、為什么block會產(chǎn)生循環(huán)引用?
a撤防、當(dāng)前block對當(dāng)前對象的某一成員變量的進(jìn)行截獲虽风,那么這個block對這個變量就有了一個強(qiáng)引用,當(dāng)前block由于當(dāng)前對象對其有一個強(qiáng)引用,就會產(chǎn)生一種自循環(huán)引用辜膝,我們可以將其變量聲明為__weak來解決
b无牵、如果我們定義一個__block也是會產(chǎn)生循環(huán)引用但是需要區(qū)分場景:
一種是ARC下可以產(chǎn)生但是MRC下不會,同時在ARC下我們通過段環(huán)方式來解決厂抖。但是有弊端若這個Block一直沒有調(diào)用這個循環(huán)引用就一直存在茎毁。
5、你都遇見過哪些循環(huán)引用验游?你又是怎樣解決的充岛?
會遇見blcok引起循環(huán)引用:block捕獲當(dāng)前對象一個成員變量同時block也是其
成員變量,通過__weak來避免耕蝉;__block也會引起崔梗,通過斷閉環(huán)來解決。