Sobes.tech
Junior — Middle

Ինչպե՞ս է տեղի ունենում հղումային տվյալների տիպերի հիշողության բաշխումը և ազատումը։

sobes.tech AI

Պատասխան AI-ից

iOS-ում, հղման տիպերի (օրինակ՝ դասերի) համար հիշողությունը դինամիկ կերպով հատկացվում է heap-ում: Երբ ստեղծվում է դասի օբյեկտ, համակարգը նրան հատկացում է հիշողություն heap-ում և վերադարձնում է հղում այդ օբյեկտին:

Հիշողության ազատումը կատարվում է ավտոմատ հղումների հաշվարկի (ARC — Automatic Reference Counting) միջոցով: Ամեն օբյեկտ պահում է հղումների հաշվիչ՝ ակտիվ հղումների թվաքանակը: Երբ ստեղծվում է նոր հղում, հաշվիչը մեծանում է, իսկ երբ հղումը ջնջվում է կամ դառնում nil, նվազում է: Երբ հաշվիչը հասնում է զրոյի, օբյեկտը ավտոմատ կերպով հեռացվում է հիշողությունից:

Օրինակ՝

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван") // հղումների հաշվիչը = 1
var person2 = person1 // հղումների հաշվիչը = 2
person1 = nil // հղումների հաշվիչը = 1
person2 = nil // հղումների հաշվիչը = 0, Person օբյեկտը հեռացվում է հիշողությունից

Այսպիսով՝ ծրագրավորողը պետք չէ ձեռքով ազատել հիշողությունը — ARC-ը դա անում է ավտոմատ կերպով։