三種類(lèi)型的 block:
1、NSGlobalBlock:存儲(chǔ)在程序的數(shù)據(jù)區(qū)域,在 block 內(nèi)部沒(méi)有引用任何外部變量。
2、NSStackBlock:存儲(chǔ)在棧上,在 block 內(nèi)部引用外部變量。在 MRC 下,棧塊在當(dāng)函數(shù)退出的時(shí)候,該空間會(huì)被回收,因此如果再調(diào)用該 block 會(huì)導(dǎo)致 crash,通過(guò)拷貝該棧塊,可以解決該問(wèn)題。在 ARC 模式下,生成的 block 也是 棧塊,只是當(dāng)賦值給 strong 對(duì)象時(shí),系統(tǒng)會(huì)主動(dòng)對(duì)其進(jìn)行 copy。
3、NSMallocBlock:存儲(chǔ)在堆上的 block。