1.__block:
???? 使用場(chǎng)景:block內(nèi)部只能夠訪問來自block外部的變量,但是卻不能夠修改外部的變量,因?yàn)槭菍⒃撏獠孔兞靠截惖狡鋽?shù)據(jù)結(jié)構(gòu)中來訪問的,數(shù)據(jù)是只讀的,block內(nèi)部不能修改外面的局部變量,如果需要修改來自block外部的變量的話,需要使用__block修飾,這樣就可以在block中修改該外部變量了
2.__weak:
? ? 使用場(chǎng)景:在使用Block時(shí)蛉加,有時(shí)候會(huì)用到self斜友,Block內(nèi)部對(duì)self默認(rèn)都是強(qiáng)引用淮逊。在ARC下贝攒,編譯器將Block從棧區(qū)拷貝到堆區(qū)幻赚,Block會(huì)強(qiáng)引用和持有self覆享,而self 也會(huì)強(qiáng)引用和持有Block靶橱,于是就造成了循環(huán)引用寥袭。此時(shí)就需要使用__weak,在修飾變量時(shí)抓韩,修飾符修飾變量self纠永,讓 block 不強(qiáng)引用self,從而破除循環(huán)(你中有我,我中有你,然后誰都不會(huì)釋放掉,內(nèi)存泄露)
3.__strong:
使用場(chǎng)景:使用了__weak修飾self后,為了保證使用時(shí)不會(huì)被釋放,就需要添加該修飾符,讓其在使用后再進(jìn)行釋放