Sobes.tech
Middle+

Kā ir uzbūvēta atmiņa iOS?

sobes.tech AI

Atbilde no AI

iOS izmanto hierarhisku atmiņas struktūru ar vairākiem veidiem:

  1. RAM (Darba atmiņa):

    • Ātra, enerģijai atkarīga atmiņas veids.
    • Izmanto aktīvi darbojošu lietojumprogrammu un datu glabāšanai.
    • To pārvalda operētājsistēma un ARC (Automātiskās atsauces skaitīšanas) mehānisms Swift/Objective-C objektiem.
    • Ja atmiņa ir izsmelta, sistēma var izdzēst (terminēt) mazāk aktīvās lietojumprogrammas.
  2. Iekšējā atmiņa (NAND Flash):

    • Lēnāka nekā RAM, bet energoizturīga.
    • Izmanto operētājsistēmas, lietojumprogrammu, lietotāja datu (foto, video, dokumentu) glabāšanai.
    • Ir ierobežots ciklu skaits rakstīšanas reizēs.
  3. Kešatmiņa (L1, L2, L3):

    • Ļoti ātra atmiņa procesora līmenī.
    • Izmanto bieži lietotu instrukciju un datu glabāšanai, lai paātrinātu piekļuvi RAM.

ARC (Automātiskās atsauces skaitīšanas)

  • Atmiņas pārvaldības mehānisms Swift un Objective-C, kas automātiski uzrauga un pārvalda atsauces uz objektiem.
  • Katram objektam ir atsauču skaits. Kad tas sasniedz nulli, atmiņa, ko aizņem objekts, tiek atbrīvota.
  • Novērš atmiņas noplūdes, bet prasa uzmanību, strādājot ar cikliskām stiprajām atsaucēm (strong reference cycles), kuras var atrisināt ar weak vai unowned atsaucēm.

Virtuālā atmiņa

  • iOS izmanto virtuālo atmiņu, ļaujot programmām izmantot adreses telpu, kas ir lielāka par fiziski pieejamo RAM.
  • Atmiņas lapas var tikt pārvietotas starp RAM un failu sistēmu (lai gan iOS tas notiek ierobežoti, galvenokārt, iztukšojot neizmantotās lapas, nevis pilnvērtīgu lapu apmaiņu uz diska kā macOS).
  • Mekanisma, piemēram, "saspiesta atmiņa", var saspiest lapas, nevis rakstīt tās uz glabātuvi.

Atmiņas pārvaldība lietojumprogrammā

  • Izstrādātājs galvenokārt strādā ar atmiņu, izmantojot ARC.
  • Ir svarīgi izvairīties no atmiņas noplūdēm, pareizi izmantojot weak un unowned.
  • Ir jāoptimizē atmiņas patēriņš, piemēram, ielādējot resursus pēc pieprasījuma, izmantojot efektīvas datu struktūras un izvairoties no lieku objektu izveides.
  • Rīki, piemēram, Xcode Instruments (Allocations, Leaks), tiek izmantoti atmiņas patēriņa profilaksei un noplūžu meklēšanai.

Piemērs, kā izmantot weak, lai novērstu stipro atsauču ciklu:

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

    init(name: String) {
        self.name = name
        print("Person \(name) ir inicializēts")
    }

    deinit {
        print("Person \(name) ir iznīcināts")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Izmanto 'weak' šeit

    init(unit: String) {
        self.unit = unit
        print("Apartment \(unit) ir inicializēts")
    }

    deinit {
        print("Apartment \(unit) ir iznīcināts")
    }
}

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

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

// Ja tenant būtu stipra atsauce, tad, nomainot john un unit4A
// objekti Person un Apartment netiktu iznīcināti
john = nil // iznīcināšanas paziņojums par john
unit4A = nil // iznīcināšanas paziņojums par unit4A