關於block的總結,歡迎大家補充

Block類型是一個C級別的語法和運行機制,是一段代碼塊,只有在被調用的時候纔會執行。它與標準的C函數類似,不同之處在於,它除了有可執行代碼以外,它還包含了與堆、棧內存綁定的變量。因此,Block對象包含着一組狀態數據,這些數據在程序執行時用於對行爲產生影響。

可以定義成變量


可以當參數傳遞


可以定義成屬性


block:類似於一個"閉包", 閉包:可以從函數外部訪問函數內部的變量.將block當做一個代碼塊來使用.

block相比於函數的優點: block 可以當做一個參數傳遞而函數/方法不能.

關於block使用中的幾點注意:

1.在使用block前需要對block指針做判空處理.不判空直接使用,一旦指針爲空直接產生崩潰

2.block定義屬性的時候要使用copy.

原因 :  定義的block變量默認是在棧區,棧區的數據是系統控制的,程序員無法控制,當發生內存警告的時候,棧區中的數據有可能被釋放,當程序員想使用block中的數據的時候有可能就不存在了,所以應該用copy在堆區copy一份.

3.block中使用 self ,要使用 self 的弱引用寫法(防止循環引用) __weak typeof(self) weakSelf = self;

關於循環引用要注意一點,在NSOperation中會存在循環引用,但因爲操作執行完就自動銷燬,所以此處block中可以出現 self,大家以後可以用到block就加上一句 __weak typeof(self) weakSelf = self;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章