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