Sobes.tech
Middle+

iOS-də yaddaş necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

iOS çoxsaylı növlərə malik ierarxik yaddaş quruluşundan istifadə edir:

  1. RAM (Təsadüfi giriş yaddaşı):

    • Sürətli, enerji asılı yaddaş növü.
    • Aktiv tətbiqləri və məlumatları saxlamaq üçün istifadə olunur.
    • Swift/Objective-C obyektləri üçün ARC (Avtomatik Referans Sayğacı) mexanizmi və əməliyyat sistemi tərəfindən idarə olunur.
    • Yaddaş çatışmazlığı zamanı sistem ən az aktiv tətbiqləri bağlaya bilər.
  2. Quraşdırılmış yaddaş (NAND Flash):

    • RAM-dən yavaş, lakin enerji asılı olmayan yaddaş növü.
    • İşletim sistemi, tətbiqlər, istifadəçi məlumatları (şəkillər, videolar, sənədlər) üçün istifadə olunur.
    • Yazma dövrlərinin sayı ilə məhdud resursu var.
  3. Keş yaddaşı (L1, L2, L3):

    • Prosessor səviyyəsində çox sürətli yaddaş.
    • Tez-tez istifadə olunan göstərişlər və məlumatlar üçün istifadə olunur, RAM-ə giriş sürətini artırmaq üçün.

ARC (Avtomatik Referans Sayğacı)

  • Swift və Objective-C-də yaddaş idarəetmə mexanizmi, obyektlərə olan referansları avtomatik izləyir və idarə edir.
  • Hər obyektin referans sayğacı var. Sıfıra çatanda, obyekt tərəfindən istifadə olunan yaddaş sərbəst buraxılır.
  • Yaddaş sızmalarını qarşısını alır, lakin weakunowned ilə işləyərkən diqqət tələb edir.

Virtual yaddaş

  • iOS virtual yaddaş istifadə edir, proqramların fiziki RAM-dən daha böyük ünvan sahəsini istifadə etməsinə imkan verir.
  • Yaddaş səhifələri RAM və fayl sistemi arasında köçürülə bilər (iOS-də bu məhduddur, əsasən istifadə olunmayan səhifələrin təmizlənməsi ilə, diskə tam swap ilə deyil, macOS kimi).
  • "Sıxılmış yaddaş" kimi mexanizmlər səhifələri sıxışdırıb saxlamağa yazmadan sıxışdıra bilər.

Tətbiqdə yaddaş idarəetməsi

  • İnkişaf etdirici əsasən ARC vasitəsilə yaddaş ilə işləyir.
  • weakunowned düzgün istifadə edilərək yaddaş sızmalarını qarşısını almaq vacibdir.
  • Yaddaş istifadəsini optimallaşdırmaq lazımdır, məsələn, resursları tələb olunduqda yükləmək, səmərəli məlumat strukturlarından istifadə etmək və çox sayda obyekt yaratmaqdan qaçınmaq.
  • Xcode Instruments (Allocations, Leaks) kimi alətlər yaddaş istifadəsini profilaktik etmək və sızmaları tapmaq üçün istifadə olunur.

weak istifadə nümunəsi, güclü referans döngələrini qarşısını almaq üçün:

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

    init(name: String) {
        self.name = name
        print("Person \(name) başlanır")
    }

    deinit {
        print("Person \(name) deinitialization olunur")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Burada 'weak' istifadə edin

    init(unit: String) {
        self.unit = unit
        print("Apartment \(unit) başlanır")
    }

    deinit {
        print("Apartment \(unit) deinitialization olunur")
    }
}

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

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

// Əgər tenant güclü olsaydı, john və unit4A nil ediləndə,
// Person və Apartment obyektləri deinitializasiya olunmazdı
john = nil // deinit çağırılır
unit4A = nil // deinit çağırılır