Sobes.tech
Junior — Middle

Կարող եք բացատրել, թե ինչպես է տեղի ունենում օբյեկտի կողմից զբաղեցրած հիշողության ազատում համակարգում?

sobes.tech AI

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

iOS-ում օբյեկտների հիշողությունը ազատելու հիմնական մեխանիզմը ARC (Ավտոմատ Հղումների Հաշվարկ) է:

Յուրաքանչյուր օբյեկտ հիշողության մեջ ունի հղումների հաշվիչ՝ ակտիվ հղումների քանակը։ Երբ ստեղծվում է հղում օբյեկտին, հաշվիչը մեծանում է; երբ հղումը հեռացվում է, այն նվազում է։ Երբ հաշվիչը հասնում է զրոյի, օբյեկտը ավտոմատ կերպով ազատվում է հիշողությունից։

Օրինակ՝

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

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

Եթե կա ցիկլային հղումներ (օրինակ՝ երկու օբյեկտ, որոնք հղում են միմյանց), ARC-ն չի կարող ավտոմատ կերպով ազատել հիշողությունը։ Այս խնդիրը լուծելու համար օգտագործվում են թույլ (weak) կամ ոչ սեփական (unowned) հղումներ, որոնք չեն մեծացնում հաշվիչը։