Sobes.tech
Junior — Middle

Bir varlıqda güclü istinad yaddaş sızıntılarına səbəb ola bilərmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, iOS-da obyektlər arasında güclü əlaqələrin olması yaddaş sızıntılarına səbəb ola bilər, xüsusən də döngəvi əlaqə (retention cycle) baş verdikdə. Bu, iki obyektin bir-birini güclü əlaqələrlə saxlaması və ARC sisteminin onları sərbəst buraxa bilməməsi ilə nəticələnir; çünki hər iki obyektin əlaqə sayğacı sıfıra çatmır.

Belə sızıntıları qarşısını almaq üçün, zəif (weak) və ya sahibsiz (unowned) əlaqələr istifadə olunur; bunlar əlaqə sayğacını artırmır və döngəni qırmağa imkan verir.

Döngəvi əlaqənin nümunəsi:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // burada saxlama döngüsü yaranır

Sızıntını qarşısını almaq üçün, əlaqələrdən birini zəif etmək olar:

class Apartment {
    weak var tenant: Person?
}