相同: 函數(shù)指針和Block都可以實(shí)現(xiàn)回調(diào)的操作,聲明上也很相似,實(shí)現(xiàn)上都可以看成是一個(gè)代碼片段。 函數(shù)指針類型和Block類型都可以作為變量和函數(shù)參數(shù)的類型。(typedef定義別名之后,這個(gè)別名就是一個(gè)類型)
不同: 函數(shù)指針只能指向預(yù)先定義好的函數(shù)代碼塊(可以是其他文件里面定義,通過(guò)函數(shù)參數(shù)動(dòng)態(tài)傳入的),函數(shù)地址是在編譯鏈接時(shí)就已經(jīng)確定好的。 Block本質(zhì)是Objective-C對(duì)象,是NSObject的子類,可以接收消息。 函數(shù)里面只能訪問(wèn)全局變量,而Block代碼塊不光能訪問(wèn)全局變量,還擁有當(dāng)前棧內(nèi)存和堆內(nèi)存變量的可讀性(當(dāng)然通過(guò)__block訪問(wèn)指示符修飾的局部變量還可以在block代碼塊里面進(jìn)行修改)。 從內(nèi)存的角度看,函數(shù)指針只不過(guò)是指向代碼區(qū)的一段可執(zhí)行代碼,而block實(shí)際上是程序運(yùn)行過(guò)程中在棧內(nèi)存動(dòng)態(tài)創(chuàng)建的對(duì)象,可以向其發(fā)送copy消息將block對(duì)象拷貝到堆內(nèi)存,以延長(zhǎng)其生命周期。
Block 和 函數(shù)指針的異同
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 相似點(diǎn): 函數(shù)指針和Block都可以實(shí)現(xiàn)回調(diào)的操作,聲明上也很相似,實(shí)現(xiàn)上都可以看成是一個(gè)代碼片段。 函數(shù)指針類型...
- 1.數(shù)組指針(也稱行指針) 定義 int (*p)[n]; ()優(yōu)先級(jí)高,首先說(shuō)明p是一個(gè)指針,指向一個(gè)整型的一維...
- 只有指針是可以運(yùn)算(移動(dòng))的,數(shù)組名是不可以的。 int x[10]; x++; //illegal int* ...