Since Delphi 3, NotifyModuleUnload in the System unit has been written the way it is now.
procedure NotifyModuleUnload(HInstance: THandle); var P: PModuleUnloadRec; begin P := ModuleUnloadList; while P <> nil do begin try P.Proc(HInstance); except // Make sure it doesn't stop notifications end; P := P.Next; end; {$IFDEF LINUX} InvalidateModuleCache; {$ENDIF} end;
The IDE calls NotifyModuleUnload in these conditions:
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes