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) հղումներ, որոնք չեն մեծացնում հաշվիչը։