Middle
Koji linkovi postoje u objektu sitetable?
sobes.tech АИ
Одговор од АИ
Јаке (strong), слабе (weak), без власника (unowned).
- Јако: Креира посед објекта и спречава његово деалокацију док постоје јаке референце.
- Слабе: Не креира посед. Ако објекат на који се односи слаба референца буде деалокиран, слаба референца се аутоматски поставља на nil. Користи се за спречавање циклуса јаке референце, често за референце на родитељски објекат или делегата.
- Без власника: Не креира посед. Слично као и слаба референца, али гарантује да ће објекат на који се односи постојати током целог свог животног циклуса без власника. Ако покушате да приступите објекту након његове деалокације, догађа се грешка у извршењу (crash). Користи се када објекти имају сличан или повезан животни циклус, и nil је прихватљив, али не и очекиван.
// Пример Јаког
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
var parent: Parent? = Parent()
var child: Child? = Child()
parent?.child = child
child?.parent = parent // Креира циклус јаке референце
parent = nil // Родитељ неће бити деалокиран због јаке референце од child
child = nil // Дете неће бити деалокиран због јаке референце од parent
// Пример Слабог
class ParentWeak {
var child: ChildWeak?
}
class ChildWeak {
weak var parent: ParentWeak? // Слаба референца
deinit {
print("ChildWeak деалокиран")
}
}
var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()
parentWeak?.child = childWeak
childWeak?.parent = parentWeak
parentWeak = nil // Родитељ деалокиран
// Дете деалокиран
// Пример Без власника
class ParentUnowned {
var child: ChildUnowned?
}
class ChildUnowned {
unowned var parent: ParentUnowned // Без власника
init(parent: ParentUnowned) {
self.parent = parent
}
deinit {
print("ChildUnowned деалокиран")
}
}
var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned мора постојати
parentUnowned?.child = childUnowned
parentUnowned = nil // ParentUnowned и ChildUnowned деалокиран