最近在看文章 ,被回調函數給難住了,以往都是函數的調用,這個回調又是啥意思,于是果斷度娘,網上講的其實挺專業的,有興趣的童鞋可以自行百度,但是太專業了,有時候也比較迷糊,比如他會講到回調函數主要是靠函數指針來實現的,度娘大概的舉的一個很經典例子如下:
假如你去商店買醋,結果到了以后售貨員告知你賣光了,本來你打算就此回家的,售貨員又講,要不你把電話留下,等一來貨,我給你打電話,你再來取貨,于是你回家了,剛吃完午飯就來電話了,你又騎車去商店把醋買了,在這個過程中,你騎車去商店買醋等等一些列動作被封裝成了函數,這個函數的名叫售貨員來電,這個函數就是所謂的回調函數。
什么是函數調用?
非標準答案:函數的調用很好理解,以我們裸奔的main函數為例,在程序中你會調用各種各樣的函數,也就是你定義的函數你調用,或者是別人定義的函數或者封裝的函數庫你直接拿來調用,這都叫函數調用。
什么是函數回調?
非標準答案:參考上面的main函數為例,那是一個完整的可執行的代碼,而函數的回調往往是在一個半成品的代碼,也就是main函數中定義了一個函數指針或者函數聲明,但是沒有函數的實現(即定義),函數的定義由別人提供,那么對于提供代碼的人來講,需要提供的函數叫回調函數,對于代碼中需要執行該函數的操作叫做函數的回調。
總結一下:函數的使用和定義都是由一個人完成的,這個函數叫做調用函數(或者就是函數),加入函數的定義和使用是由兩個人完成的,一個只負責定義函數,一個只負責調用函數,那么這個函數叫做是回調函數。
在我們GUI系統回調函數是最常用的應用,系統只會根據動作去回調相應的函數執行,而函數如何執行使我們的應用工程師去實現的內容。
除了在GUI系統中應用最常見之外,還有一個很重要的場景就是系統的移植,那些需要系統在運行中去實現的跟具體的CPU和編譯器相關的內容,也是大部分采用回調的方式來解決的。
高亮部分是QF構架對于回調的定義。