Sobes.tech
Junior — Middle

Կարո՞ղ է ուժեղ հղումը միավորի մեջ հանգեցնել հիշողության արտահոսքի:

sobes.tech AI

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

Այո, iOS-ում օբյեկտների միջև ուժեղ հղումների առկայությունը կարող է հանգեցնել հիշողության արտահոսքի, հատկապես եթե առաջանում է ցիկլային հղում (retention cycle): Դա տեղի է ունենում, երբ երկու օբյեկտներ միմյանց պահում են ուժեղ հղումներով, և ARC համակարգը չի կարող ազատել նրանց, քանի որ երկու օբյեկտների հղման հաշվիչը չի հասնում զրոյի:

Այսպիսի արտահոսքերը կանխելու համար օգտագործվում են թույլ (weak) կամ առանց սեփականատիրոջ (unowned) հղումներ, որոնք չեն ավելացնում հղման հաշվիչը և թույլ են տալիս կոտրել ցիկլը:

Ցիկլային հղման օրինակ՝

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // այստեղ առաջանում է պահպանում ցիկլ

Անցնելու համար արտահոսքը, կարելի է մեկը հղումներից թույլ դարձնել՝

class Apartment {
    weak var tenant: Person?
}