Hvad er dynamiske biblioteker?
De fleste funktioner i en app er implementeret i biblioteker med eksekverbar kode. Når en app linkes med et bibliotek ved hjælp af en statisk linker, kopieres den kode, som appen bruger, til den genererede eksekverbare fil. En statisk linker samler kompileret kildekode, kendt som objektkode, og bibliotekskode i én eksekverbar fil, som indlæses i hukommelsen i sin helhed på køretid. Den type bibliotek, der bliver en del af en app’s eksekverbare fil, kaldes et statisk bibliotek. Statiske biblioteker er samlinger eller arkiver af objektfiler.
Når en app startes, indlæses appens kode – som omfatter koden for de statiske biblioteker, som den blev linket med – i appens adresseområde. Ved at linke mange statiske biblioteker til en app opstår der store eksekverbare app-filer. Figur 1 viser hukommelsesforbruget i en app, der bruger funktionalitet, der er implementeret i statiske biblioteker. Programmer med store eksekverbare filer lider under langsomme starttider og et stort hukommelsesaftryk. Når et statisk bibliotek opdateres, får dets klientapps heller ikke gavn af de forbedringer, der er foretaget i det. For at få adgang til den forbedrede funktionalitet skal appudvikleren linke appens objektfiler med den nye version af biblioteket. Og app-brugerne skal udskifte deres kopi af appen med den nyeste version. Derfor kræver det forstyrrende arbejde for både udviklere og slutbrugere at holde en app opdateret med den nyeste funktionalitet, der leveres af statiske biblioteker.
En bedre tilgang er, at en app indlæser kode i sit adresseområde, når der rent faktisk er brug for den, enten ved lanceringen eller ved kørslen. Den type bibliotek, der giver denne fleksibilitet, kaldes dynamisk bibliotek. Dynamiske biblioteker er ikke statisk knyttet til klientapps; de bliver ikke en del af den eksekverbare fil. I stedet kan dynamiske biblioteker indlæses (og linkes) i en app, enten når appen startes, eller når den kører.
Figur 2 viser, hvordan implementering af visse funktioner som dynamiske biblioteker i stedet for som statiske biblioteker reducerer den hukommelse, som appen bruger efter lanceringen.
Med dynamiske biblioteker kan programmer drage fordel af forbedringer af de biblioteker, de bruger, automatisk, fordi deres link til bibliotekerne er dynamisk og ikke statisk. Det vil sige, at funktionaliteten i klientprogrammerne kan forbedres og udvides, uden at det kræver, at programudviklerne skal kompilere programmerne på ny. Apps, der er skrevet til OS X, har fordel af denne funktion, fordi alle systembiblioteker i OS X er dynamiske biblioteker. Det er på denne måde, at apps, der anvender Carbon- eller Cocoa-teknologier, drager fordel af forbedringer i OS X.
En anden fordel, som dynamiske biblioteker giver, er, at de kan initialiseres, når de indlæses, og kan udføre oprydningsopgaver, når klientappen afsluttes normalt. Statiske biblioteker har ikke denne funktion. Du kan finde flere oplysninger under Modulinitialisatorer og finalisatorer.
Et problem, som udviklere skal være opmærksomme på, når de udvikler dynamiske biblioteker, er at opretholde kompatibilitet med klientapper, når et bibliotek opdateres. Da et bibliotek kan opdateres uden kendskab til klientappens udvikler, skal appen kunne bruge den nye version af biblioteket uden ændringer i dens kode. Med henblik herpå bør bibliotekets API ikke ændres. Der er dog nogle gange, hvor forbedringer kræver API-ændringer. I så fald skal den tidligere version af biblioteket forblive på brugerens computer, for at klient-appen kan køre korrekt. Retningslinjer for design af dynamiske biblioteker udforsker emnet for håndtering af kompatibilitet med klientapps, når et dynamisk bibliotek udvikler sig.