- inline直接敲出block格式 returnType(^blockName)(parameterTypes) = ^(parameters) {
statements
};
- 作用:跟函數(shù)和方法很像允悦,其實(shí)就是用來保存一段代碼膝擂,等到恰當(dāng)?shù)臅r(shí)候再去使用
- 使用:逆?zhèn)饔胋lock傳值,處理網(wǎng)絡(luò)的時(shí)候常使用block封裝代碼
- 利用block傳值隙弛,需要把什么傳遞出去架馋,就作為block參數(shù),通常不需要返回值
一全闷、block是不是一個(gè)對象?
答:是一個(gè)對象
二叉寂、如何判斷當(dāng)前文件是MRC,還是ARC
1.dealloc 能否調(diào)用super,只有MRC才能調(diào)用super
2.能否使用retain,release.如果能用就是MRC
三、內(nèi)存管理
ARC管理原則:
只要一個(gè)對象沒有被強(qiáng)指針修飾就會(huì)被銷毀,默認(rèn)局部變量對象都是強(qiáng)指針,存放到堆里面
MRC了解開發(fā)常識(shí):
1.MRC沒有strong,weak,局部變量對象就是相當(dāng)于基本數(shù)據(jù)類型
2.MRC給成員屬性賦值,一定要使用set方法,不能直接訪問下劃線成員屬性賦值
MRC:管理block
只要Block引用外部局部變量,block放在棧里面.
block只能使用copy,不能使用retain,使用retain,block還是在棧里面
ARC:管理block
只要block引用外部局部變量,block放在堆里面
block使用strong,最好不要使用copy
共同特點(diǎn):只要block沒有引用外部局部變量,block放在全局區(qū)
四总珠、為了防止循環(huán)retain
非ARC:如果所引用的對象用了__block修飾屏鳍,就不會(huì)做retain操作
ARC:如果所引用的對象用了__unsafe_unretained/__weak修飾,就不會(huì)做retain操作
五局服、block細(xì)節(jié)
block外部:__weak typeof(self) weakself = self;
block內(nèi)部:__strong typeof(weakself) strongSelf = weakself;
block1內(nèi)部的block2在被調(diào)用時(shí)钓瞭,防止訪問的對象提前釋放;具體請理解下面的總結(jié)淫奔。
- 如果【block內(nèi)部】使用【外部聲明的強(qiáng)引用】訪問【對象A】, 那么【block內(nèi)部】會(huì)自動(dòng)產(chǎn)生一個(gè)【強(qiáng)引用】指向【對象A】
- 如果【block內(nèi)部】使用【外部聲明的弱引用】訪問【對象A】, 那么【block內(nèi)部】會(huì)自動(dòng)產(chǎn)生一個(gè)【弱引用】指向【對象A】