相同: 函數指針和Block都可以實現回調的操作,聲明上也很相似,實現上都可以看成是一個代碼片段。 函數指針類型和Block類型都可以作為變量和函數參數的類型。(typedef定義別名之后,這個別名就是一個類型)
不同: 函數指針只能指向預先定義好的函數代碼塊(可以是其他文件里面定義,通過函數參數動態傳入的),函數地址是在編譯鏈接時就已經確定好的。 Block本質是Objective-C對象,是NSObject的子類,可以接收消息。 函數里面只能訪問全局變量,而Block代碼塊不光能訪問全局變量,還擁有當前棧內存和堆內存變量的可讀性(當然通過__block訪問指示符修飾的局部變量還可以在block代碼塊里面進行修改)。 從內存的角度看,函數指針只不過是指向代碼區的一段可執行代碼,而block實際上是程序運行過程中在棧內存動態創建的對象,可以向其發送copy消息將block對象拷貝到堆內存,以延長其生命周期。
Block 和 函數指針的異同
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 只有指針是可以運算(移動)的,數組名是不可以的。 int x[10]; x++; //illegal int* ...