天天看點

iOS - OC Block 代碼塊前言1、Block 的使用2、Block 的回調3、Block 屬性定義中為什麼使用 copy 修飾4、循環引用

Block 是一段預先準備好的代碼,可以在需要的時候執行,可以當作參數傳遞。Block 可以作為函數參數或者函數的傳回值,而其本身又可以帶輸入參數或傳回值。Block 是 C 語言的,類似于一個匿名函數,它和傳統的函數指針很類似,但是 Block 是 inline(内聯函數)的,并且預設情況下它對局部變量是隻讀的。

蘋果官方建議盡量多用 Block。在多線程、異步任務、集合周遊、集合排序、動畫轉場用的很多。

Block 文法

Block 的簡單定義

Block 資料類型的定義

Block 可以通路局部變量,但是不能修改,如果要修改需加關鍵字 __block(雙下劃線)。

ARC 開發的時候,編譯器底層對 block 做過一些優化,使用 copy 修飾可以防止出現記憶體洩漏。

從記憶體管理的角度而言,程式員需要管理的記憶體隻有堆區的。如果用 strong 修飾,相當于強引用了一個棧區的變量。

而使用 copy 修飾,在設定數值的時候,可以把局部變量從棧區複制到堆區。

在 Block 中調用 self 容易産生循環引用,無法釋放對象,在程式中可以使用析構方法判斷是否産生了循環引用。

可以使用關鍵字 __weak 聲明一個弱變量,或者為屬性指定 weak 特性。如:

繼續閱讀