Sobes.tech
Middle+

iOS'ta bellek nasıl yapılandırılmıştır?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS, çoklu türlere sahip hiyerarşik bir bellek yapısı kullanır:

  1. RAM (Rastgele Erişim Belleği):

    • Hızlı, enerjiye bağımlı bir bellek türüdür.
    • Aktif uygulamaları ve verileri depolamak için kullanılır.
    • Swift/Objective-C nesneleri için ARC (Otomatik Referans Sayacı) mekanizması ve işletim sistemi tarafından yönetilir.
    • Bellek yetersizliği durumunda, sistem en az aktif uygulamaları kapatabilir.
  2. Gömülü Bellek (NAND Flash):

    • RAM'den daha yavaş, ancak enerjiye bağımlı olmayan bir bellek türüdür.
    • İşletim sistemi, uygulamalar, kullanıcı verileri (fotoğraflar, videolar, belgeler) için kullanılır.
    • Sınırlı yazma döngüsü kaynağına sahiptir.
  3. Önbellek Belleği (L1, L2, L3):

    • İşlemci seviyesinde çok hızlı bellektir.
    • Sık kullanılan talimatlar ve verileri depolamak için kullanılır, böylece RAM erişimi hızlandırılır.

ARC (Otomatik Referans Sayacı)

  • Swift ve Objective-C'de bellek yönetim mekanizmasıdır, nesnelere olan referansları otomatik olarak izler ve yönetir.
  • Her nesnenin bir referans sayacı vardır. Sıfıra ulaştığında, nesne tarafından kullanılan bellek serbest bırakılır.
  • Bellek sızıntılarını önler, ancak strong reference cycles (güçlü referans döngüleri) ile çalışırken dikkat gerektirir, bunlar weak veya unowned ile çözülebilir.

Sanal Bellek

  • iOS, programların fiziksel RAM'den daha büyük adres alanı kullanmasına izin veren sanal bellek kullanır.
  • Bellek sayfaları RAM ile dosya sistemi arasında taşınabilir (iOS'ta sınırlıdır, esasen kullanılmayan sayfaların temizlenmesiyle sınırlıdır, tam disk takası gibi değildir macOS'ta).
  • "Sıkıştırılmış bellek" gibi mekanizmalar, sayfaları yazarak yerine sıkıştırabilir.

Uygulama Bellek Yönetimi

  • Geliştirici, çoğunlukla ARC aracılığıyla bellekle çalışır.
  • Bellek sızıntılarını önlemek için weak ve unowned doğru kullanılmalıdır.
  • Bellek tüketimini optimize etmek gerekir, örneğin, kaynakları talep üzerine yükleyerek, verimli veri yapıları kullanarak ve aşırı nesne oluşturmayı önleyerek.
  • Xcode Instruments (Allocations, Leaks) gibi araçlar, bellek kullanımı profilini çıkarmak ve sızıntıları tespit etmek için kullanılır.

weak kullanımıyla güçlü referans döngülerini önlemek için örnek:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("Person \(name) başlatılıyor")
    }

    deinit {
        print("Person \(name) yok ediliyor")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Burada 'weak' kullanın

    init(unit: String) {
        self.unit = unit
        print("Apartment \(unit) başlatılıyor")
    }

    deinit {
        print("Apartment \(unit) yok ediliyor")
    }
}

var john: Person? = Person(name: "John Appleseed")
var unit4A: Apartment? = Apartment(unit: "4A")

john?.apartment = unit4A
unit4A?.tenant = john

// Tenant güçlü olsaydı, john ve unit4A nil yapıldığında,
// Person ve Apartment nesneleri deinitialization gerçekleşmezdi
john = nil // deinit çağrılır
unit4A = nil // deinit çağrılır