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?
}