Ինչպես է կատարվում հիշողության կառավարումը 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-ը նրանց վրա չի գործում: