Based on what I study, iOS uses most(all) of system frameworks as dynamic frameworks. Does iOS load all of them when an app launches? Or iOS may load it later when iOS actually need the framework?
The advantage of loading it when an app launches: Save more time when iOS calls the functions in the dynamic frameworks.
The advantage of loading it lazily: Save more memory.
The Wikipedia page on dynamic linking covers both the general idea and a number of details specific to various popular operating systems. It says (in part) this about Darwin, including macOS and iOS:
Furthermore, if you read the man page for
dyld, the dynamic loader, you'll find an environment variable calledDYLD_BIND_AT_LAUNCHthat is described thus:A final piece of evidence is in Apple's Overview of Dynamic Libraries document, which says in part:
And in the next paragraph:
Given all that, it sounds like iOS probably loads each dynamic framework as part of the process of launching an app, but defers actually binding undefined names in the app to definitions in the framework until it's actually needed.