Jaka jest różnica między hook i callback?

Czytając tekst, zwłaszcza dokument iOS o delegacie, wszystkie metody protokołu są nazywane hook, które niestandardowy obiekt delegate musi zaimplementować. Ale niektóre inne książki, nazywając te hook jako callback , Jaka jest różnica między nimi? Czy to tylko inna nazwa, ale ten sam mechanizm? Oprócz Obj-C, niektóre inne języki programowania, takie jak C, również mają hook , taka sama sytuacja z Obj-C?

Author: coanor, 2012-06-18

3 answers

Terminologia tutaj jest nieco niejasna. Ogólnie rzecz biorąc, obie próby osiągnięcia podobnych wyników.

Ogólnie rzecz biorąc, wywołanie zwrotne jest funkcją (lub delegatem), którą rejestrujesz w API, aby być wywołanym w odpowiednim czasie w przepływie przetwarzania (np. aby powiadomić Cię, że przetwarzanie jest na pewnym etapie)

A hook tradycyjnie oznacza coś nieco bardziej ogólnego, co służy do modyfikowania wywołań API (np. modyfikowania przekazywanych parametrów, monitoruje wywołane funkcje). W tym sensie jest to zwykle znacznie niższy poziom niż to, co można osiągnąć przez języki wyższego poziomu, takie jak Java.

W kontekście iOS słowo hook oznacza dokładnie to samo co callback powyżej

 25
Author: Attila,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 19:23:29

Oba terminy są bardzo podobne i są czasami używane zamiennie. Hook jest opcją w bibliotece, gdy kod użytkownika może połączyć funkcję, aby zmienić zachowanie biblioteki. Funkcja biblioteki nie musi być uruchamiana równocześnie z kodem użytkownika; jak w destruktorze.

Wywołanie zwrotne to specyficzny typ Hooka, w którym kod użytkownika inicjuje wywołanie biblioteki, Zwykle wywołanie We / Wy lub wywołanie GUI, które przekazuje contol do jądra lub podsystemu GUI. Proces kontrolowania następnie 'oddzwania' kod użytkownika na interupt lub sygnał, aby kod użytkownika mógł dostarczyć obsługę.

Historycznie widziałem Hooka używanego do obsługi interupt i wywołania zwrotnego używanego do obsługi zdarzeń GUI. Widzę również hook używany, gdy rutyna ma być statyczny linked i callback używany w dynamicznym kodzie.

 12
Author: starbolin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 17:21:38

Dwie świetne odpowiedzi, ale chciałem dorzucić jeszcze jeden dowód terminy "hook" i "callback" są takie same i mogą być używane zamiennie : FreeRTOS faworyzuje termin "hook", ale rozpoznaje "callback" jako odpowiednik terminu, kiedy mówią:

Zadanie bezczynności może opcjonalnie wywołać zdefiniowaną przez aplikację funkcję Hooka (lub callback) - Hook bezczynności.

Przerwanie kleszcza może opcjonalnie wywołać program zdefiniowany hook (lub callback) funkcja-hak kleszczowy.

Schematy alokacji pamięci zaimplementowane przez heap_1.C, sterta_2.C, sterta_3.C, sterta_4.c oraz sterty_5.c może opcjonalnie zawierać błąd malloc () hook (lub callback) , który można skonfigurować tak, aby był wywoływany, jeśli pvPortMalloc () kiedykolwiek zwróci NULL.

Źródło: https://www.freertos.org/a00016.html

 2
Author: Gabriel Staples,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 17:27:33