本文代碼示例多出自《Objective-C高級編程 iOS與OS X多線程和內(nèi)存管理》,也有多處解釋參考原文。也有部分內(nèi)容參考于《Effective Objective-C 2.0 編寫高質(zhì)量iOS與OS X代碼的52個有效方法》
Block是一種特殊的,可以生存在棧區(qū)(叫棧塊)、堆區(qū)(叫堆塊)、以及程序數(shù)據(jù)區(qū)域即全局區(qū)(叫全局塊)的Objective-C對象。在堆區(qū)的Block也有引用計數(shù),適用于ARC的內(nèi)存管理機制。
clang(LLVM編譯器)能把Objective-C轉(zhuǎn)換成可讀源代碼(C++)的功能:
clang -rewrite-objc 源代碼文件名
</br>
因為原文章過長,誰都很難有勇氣一口氣讀完,故把其分為以下幾個部分:
1、Block僅用作輸出語句的情況
</br>
2、Block截獲自動變量的情況
</br>
3、Block截獲靜態(tài)變量的情況
</br>
4、Block中使用__block變量的情況
</br>
5、Block截獲對象的情況
</br>
6、Block使用__block?變量,且該變量為對象的情況
</br>
7、Block存儲域
</br>
8、__block變量存儲域
</br>