本文代碼示例多出自《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)存管理機(jī)制掺涛。
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>