Junior — Middle
Kako se oslobađa memorija za objekte sa cikličnim referencama u upravljanim okruženjima?
sobes.tech АИ
Одговор од АИ
У управљаним окружењима, као што је 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 се позивају међусобно, али једна од референци је слаба, што спречава цурење меморије.
Ако се циклуси референци не прекину, објекти ће остати у меморији и без спољашњих референци, што ће довести до цурења меморије.