iOS’da Statik ve Dinamik Kütüphaneler

Oğuzhan TURHAL
Coding Wizards
3 min readFeb 24, 2022

--

Burada iOS geliştirmeye başladıktan sonra karşımıza çıkınca ya biliyorum ama açıklayamıyorum diyeceğiniz bir konu hakkında yazı bulacaksınız.(Kendimde de bu durumda kaldığım için bu konuyu yazıyorum.)

Statik Kütüphaneler Nedir?

Bir uygulama, statik bir bağlayıcı kullanılarak bir kütüphaneye (Framework) bağlandığında, uygulamanın kullandığı kod, oluşturulan yürütülebilir dosyaya kopyalanır. Statik bir bağlayıcı, nesne kodu olarak bilinen derlenmiş kaynak kodunu ve framework kodunu, build zamanında bütünüyle belleğe yüklenen tek bir yürütülebilir dosyada toplar. Bir uygulamanın yürütülebilir dosyasının parçası haline gelen kitaplık türü, Statik Kütüphane olarak bilinir. — Apple Linki

Apple dökümanlarından da görüldüğü gibi, bir uygulama başlatıldığında, uygulamanın yürütülebilir dosyası (bağlı olduğu statik kitaplıkların ikili dosyasını içerir) uygulamanın adres alanına yüklenir.

Apple

Tabii beklendiği gibi bu durum başlatma sürelerini uzatır ve belleği gereğinden fazla şişirmeye sebep olur.

Dinamik Kütüphaneler Nedir?

Bu özellik ios 8 ve swift ile gelmiş ve kütüphaneleri ihtiyaç olduğunda (on-the-fly) yüklüyor ve bu sayede daha hızlı etkileşim sağlanıyor ve belleğe yüklenen uygulama daha az yer kaplıyor.

Dinamik kütüphaneler, istemci uygulamalarına statik olarak bağlı değildir; build alınan dosyanın bir parçası olmazlar. Bunun yerine, uygulama başlatıldığında veya çalışırken dinamik kitaplıklar bir uygulamaya yüklenebilir (veya bağlanabilir). — Apple Link

Apple

Dinamik bağlantı durumunda, uygulama gerçekten ihtiyaç duyulduğunda, başlatma zamanında veya çalışma zamanında kitaplık kodunu adres alanına yükler.

Statik kütüphane kullanmanın artıları:

Derleme zamanında ekleyeceğiniz uygulamaya bağladığınızda ve tek bir yürütülebilir dosya oluşturduklarından çalıştırmak için gereken tüm kodun yerinde olduğunu garanti eder.

Statik kütüphane kullanmanın eksileri:

Statik kütüphaneler, bir uygulamanın yürütülebilir dosya boyutunu artırır.

Büyük yürütülebilir dosyalara sahip uygulamalar, yavaş başlatma sürelerinden ve yüksek bellek harcamadan muzdariptirler.

Statik bir kütüphane güncellendiğinde, ana uygulama yürütülebilir dosyası kitaplığın ikili dosyasına bağlı olduğundan, ana uygulamanın tamamının en son sürümle güncellenmesi gerekir.

Dinamik kütüphane kullanmanın artıları:

Ana uygulama, başlatma zamanında veya çalışma zamanında, gerçekten ihtiyaç duyulduğunda kodu adres alanına yükler

Ayrıca uygulamaların, özel işlevselliğe sahip kitaplıkları yüklemeyi başlatma zamanı yerine yalnızca ihtiyaç duyulduklarında geciktirmesine olanak tanır.

Bu özellik, daha kısa başlatma sürelerine ve verimli bellek kullanımına katkıda bulunur.

Bir uygulamanın yürütülebilir dosyasının küçültülmüş boyutu ve başlatıldığında bellek kullanımının en aza indirilmesi, uygulamanın daha hızlı başlatılmasını ve başlatıldığında daha az bellek kullanmasını sağlar

Kitaplıkta bir yükseltme olduğunda uygulama geliştiricilerinin ana bilgisayar uygulamalarını yeniden derlemesini gerektirmez. Dinamik olarak bağlantılı modüller, yüklendiğinde başlatılabilir ve istemci uygulaması normal şekilde sonlandırıldığında temizleme görevlerini gerçekleştirebilir.

Dinamik kütüphane kullanmanın eksileri:

Projeye çok sayıda dinamik kitaplık eklemek, başlatma sırasında performans gecikmesine neden olan bir sorun oluşturabilir.

Embed sırasını kaçırırsanız uygulama crash olabilir.

Statik veya Dinamik hangisini seçmeliyim diyorsanız belgelere dayanarak ve Apple önerisini dikkate alarak, Dinamik olarak bağlantılı kitaplığın kullanılmasını ve yukarıdaki nedenlerden dolayı statik bağlantıdan kaçınılmasını önermek sanırım yanlış olmaz.

Apple önerisine değinecek olursak da statik kitaplıklar yerine dinamik kitaplıklar kullanılmasıdır, bunları kullanan uygulamaların hem dosya boyutunu hem de ilk bellek boyutunu azaltır. Ancak aynı zamanda çok fazla dinamik kitaplık kullanmamaya özen gösterilmelidir.

--

--