Sobes.tech
Middle+

حافظه در iOS چگونه ساختاربندی شده است؟

sobes.tech AI

Ҷавоб аз AI

iOS истифода мекунад хирасерхии структураи хотира бо чанд намуд:

  1. RAM (Хотираи Амал):

    • Нав ва вобаста ба энергия навъи хотира.
    • Барои нигоҳдории барномаҳои фаъол ва маълумот истифода мешавад.
    • Аз ҷониби системаи оператсионӣ ва механизм ARC (Automatic Reference Counting) барои объектҳои Swift/Objective-C идора карда мешавад.
    • Дар ҳолати камбуди хотира, система метавонад барномаҳои камтар фаъолро қатъ кунад.
  2. Хотираи дарунсохт (NAND Flash):

    • Баъдтар аз RAM, аммо беэнергия.
    • Барои нигоҳдории системаи оператсионӣ, барномаҳо, маълумоти корбар (тасвирҳо, видеоҳо, ҳуҷҷатҳо) истифода мешавад.
    • Миқдори марҳилаҳои навсозиро маҳдуд мекунад.
  3. Хотираи кеш (L1, L2, L3):

    • Хотираи хеле зуд дар сатҳи протсессор.
    • Барои нигоҳдории дастурҳо ва маълумоти зиёд истифода мешавад барои суръат бахшидани дастрасӣ ба RAM.

ARC (Automatic Reference Counting)

  • Механизми идоракунии хотира дар Swift ва Objective-C, ки автоматӣ пайгирӣ ва идора мекунад ишораҳо ба объектҳоро.
  • Ҳар объект дорои ҳисобкунаки ишораҳо мебошад. Вақте ки он ба сифр мерасад, хотирае, ки объектро ишғол мекунад, озод карда мешавад.
  • Пешгирӣ мекунад аз ҷорӣ шудани хотира, аммо эҳтиёҷ дорад ба диққат дар кор бо гардишҳои ишораҳои қавӣ (strong reference cycles), ки метавонанд бо истифода аз weak ё unowned ҳал карда шаванд.

Хотираи виртуалӣ

  • iOS истифода мекунад хотираи виртуалӣ, ки имкон медиҳад барномаҳо истифодаи фазои бештар аз RAM-и физикӣ дошта бошанд.
  • Саҳифаҳое, ки хотира доранд, метавонанд байни RAM ва системаи файлӣ гузаранд (ҳарчанд дар iOS ин маҳдуд аст, асосан тавассути тоза кардани саҳифаҳои номуайян, на пӯшиши пурра дар диск, ки дар macOS истифода мешавад).
  • Механизмҳое мисли "меморияи кумушташуда" метавонанд саҳифаҳоро кумушташударо кунанд, ба ҷои навиштан ба нигоҳдорӣ.

Идоракунии хотира дар барнома

  • Тавре ки таҳиягар асосан бо хотира тавассути ARC кор мекунад.
  • Муҳим аст, ки аз ҷорӣ шудани хотираҳо пешгирӣ шавад, бо истифодаи дуруст аз weak ва unowned.
  • Бояд истифодаи хотира оптимизатсия шавад, масалан, бо боркунии захираҳо ба талабот, истифодаи сохторҳои муассир ва пешгирии сохтани объектҳои зиёдатӣ.
  • Воситаҳо мисли Xcode Instruments (Allocations, Leaks) барои профилинг ва ҷустуҷӯи ҷорӣ шудани хотираҳо истифода мешаванд.

Масалан, истифодаи weak барои пешгирии гардишҳои ишораҳои қавӣ:

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

    init(name: String) {
        self.name = name
        print("Person \(name) is being initialized")
    }

    deinit {
        print("Person \(name) is being deinitialized")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Ин ҷо истифода баред 'weak'

    init(unit: String) {
        self.unit = unit
        print("Apartment \(unit) is being initialized")
    }

    deinit {
        print("Apartment \(unit) is being deinitialized")
    }
}

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

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

// Агар tenant қавӣ бошад, вақте ки john ва unit4A
// объектҳо деинициализатсия намешаванд
john = nil // deinit барои john
unit4A = nil // deinit барои unit4A