Junior — Middle
Ինչպե՞ս է տեղի ունենում հիշողության ազատում ցիկլային հղումներով օբյեկտների համար կառավարվող միջավայրերում։
sobes.tech AI
Պատասխան AI-ից
Կառավարվող միջավայրերում, ինչպիսիք են iOS- ի ARC (Ավտոմատ Հղումի Հաշվարկը), օբյեկտների ցիկլային հղումների համար հիշողության ազատումը տեղի չի ունենում ավտոմատ, քանի որ ARC- ն չի կարող կոտրել հղումների ցիկլերը:
Այս խնդրի լուծման համար օգտագործվում են թույլ (weak) և առանց սեփականատիրոջ (unowned) հղումներ, որոնք չեն ավելացնում օբյեկտի հղումների հաշվիչը: Սա թույլ է տալիս կոտրել ցիկլերը և ճիշտ կերպով ազատել հիշողությունը:
Օրինակ՝
class Person {
var name: String
weak var apartment: Apartment? // թույլ հղում
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // առանց սեփականատիրոջ հղում
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Այստեղ, Person և Apartment հղում են միմյանց, բայց մեկը թույլ է, ինչը կանխում է հիշողության լճացումը:
Եթե հղումների ցիկլերը չկտրվեն, օբյեկտները կմնան հիշողության մեջ, չնայած արտաքին հղումներին, ինչը կհանգեցնի հիշողության լճացման: