Junior — Middle
Millised on erinevused Strong ja Weak viidete tüüpide vahel mälu haldamisel ja viidete mudelis?
sobes.tech AI
Vastus AI-lt
Strong-ühendus — see on tavaline tugev ühendus objekti suhtes, mis suurendab selle objekti viidete arvu (retain count). Seni kuni on vähemalt üks tugev ühendus, objekt ei eemaldata mälust.
Weak-ühendus — see on nõrk ühendus, mis ei suurenda objekti viidete arvu. Seda kasutatakse tsükliliste viidete (retain cycles) vältimiseks. Kui objekt, millele weak-ühendus viitab, eemaldatakse, muutub weak-ühendus automaatselt nil-iks.
Näide Swiftis:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // weak-ühendus tsüklite vältimiseks
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-ühendus
Siin ei hoia weak-ühendus tenant Person objekti, mis võimaldab vältida mälulekkeid.