Block 是一段預先準備好的代碼,可以在需要的時候執行,可以當作參數傳遞。Block 可以作為函數參數或者函數的傳回值,而其本身又可以帶輸入參數或傳回值。Block 是 C 語言的,類似于一個匿名函數,它和傳統的函數指針很類似,但是 Block 是 inline(内聯函數)的,并且預設情況下它對局部變量是隻讀的。
蘋果官方建議盡量多用 Block。在多線程、異步任務、集合周遊、集合排序、動畫轉場用的很多。
Block 文法
Block 的簡單定義
Block 資料類型的定義
Block 可以通路局部變量,但是不能修改,如果要修改需加關鍵字 __block(雙下劃線)。
ARC 開發的時候,編譯器底層對 block 做過一些優化,使用 copy 修飾可以防止出現記憶體洩漏。
從記憶體管理的角度而言,程式員需要管理的記憶體隻有堆區的。如果用 strong 修飾,相當于強引用了一個棧區的變量。
而使用 copy 修飾,在設定數值的時候,可以把局部變量從棧區複制到堆區。
在 Block 中調用 self 容易産生循環引用,無法釋放對象,在程式中可以使用析構方法判斷是否産生了循環引用。
可以使用關鍵字 __weak 聲明一個弱變量,或者為屬性指定 weak 特性。如: