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