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?
}