Sobes.tech
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.