Sobes.tech
Middle

Ինչպես է կատարվում հիշողության կառավարումը Swift-ում հղումային տիպերի համար։

sobes.tech AI

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

Swift-ում հիշողության կառավարումը հղումային տիպերի (դասերի) համար կատարվում է ավտոմատ հղումների հաշվարկով (ARC, Automatic Reference Counting): Յուրաքանչյուր օբյեկտ heap-ում պահպանում է հղումների հաշվիչը՝ ակտիվ հղումների քանակը այդ օբյեկտին: Երբ ստեղծվում է նոր հղում օբյեկտին, հաշվիչը բարձրանում է, և երբ հղումը այլևս չի օգտագործվում, իջնում է: Երբ հաշվիչը հասնում է զրոյի, օբյեկտը ավտոմատ կերպով ջնջվում է հիշողությունից:

Օրինակ՝

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

var a: Person? = Person(name: "Alice") // հաշվիչ = 1
var b = a                             // հաշվիչ = 2
b = nil                              // հաշվիչ = 1
a = nil                              // հաշվիչ = 0, օբյեկտը ջնջվում է

Կարևոր է խուսափել ցիկլային հղումներից (retain cycles), երբ երկու օբյեկտներ միմյանց վրա հղում են կատարում, ինչը խանգարում է հիշողության ազատմանը: Դրա համար օգտագործվում են թույլ (weak) և առանց սեփականության (unowned) հղումներ:

Արժեքային տիպերը (ստրուկտուրաներ, enum-ներ) պահվում են ստեկում և պատճենվում են նշանակելիս, այդ պատճառով ARC-ը նրանց վրա չի գործում: