Sobes.tech
Junior — Middle

Kas tugev viide üksuses võib põhjustada mälulekke?

sobes.tech AI

Vastus AI-lt

Jah, tugevate viidete olemasolu objektide vahel iOS-is võib põhjustada mälulekkeid, eriti kui tekib tsükliline viide (retention cycle). See juhtub, kui kaks objekti hoiavad üksteist tugeva viitega, ja ARC süsteem ei saa neid vabastada, kuna mõlema viitearv ei jõua nullini.

Selliste lekkide vältimiseks kasutatakse nõrku (weak) või omandita (unowned) viiteid, mis ei suurenda viitearvutit ja võimaldavad tsüklit katkestada.

Tsüklilise viite näide:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // siin tekib retention cycle

Leekide vältimiseks võib ühe viite teha nõrgaks:

class Apartment {
    weak var tenant: Person?
}