Sobes.tech
Junior — Middle

Կարող եք բացատրել Swift-ի գարշահավաքի աշխատանքային մեխանիզմը և ինչպես է այն կառավարում հիշողությունը?

sobes.tech AI

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

Swift-те չկա դասական աղբահանիչ (Garbage Collector), ինչպես որոշ այլ լեզուներում: փոխարենը օգտագործվում է ավտոմատ հղումների հաշվարկման մեխանիզմը (ARC - Automatic Reference Counting):

ARC-ը աշխատում է այսպես. յուրաքանչյուր օբյեկտի հիշողության մեջ կա հղումների հաշվիչ, որը մեծանում է, երբ ստեղծվում է նոր հղում օբյեկտին, և նվազում է, երբ հղումը հեռացվում է կամ դառնում nil: Երբ օբյեկտի հղումների հաշվիչը հասնում է զրոյի, օբյեկտը ավտոմատ կերպով հեռացվում է հիշողությունից:

Օրինակ:

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

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

Այսպիսով, հիշողության կառավարումը Swift-те ավտոմատ է, և ձեռքով հավաքողին կանչելու կարիք չկա, ինչը բարձրացնում է կատարողականությունը և նվազեցնում հիշողության արտահոսքի հավանականությունը ճիշտ օգտագործման դեպքում: