Sobes.tech
Junior — Middle

İdarə olunan mühitlərdə döngəli istinadlara malik obyektlərin yaddaşı necə azad edilir?

sobes.tech Süni İntellekt

AI-dan cavab

İdarə olunan mühitlərdə, məsələn, iOS ARC (Avtomatik Referans Sayımı) ilə, döngəli referanslara malik obyektlərin yaddaşdan azad olunması avtomatik baş vermir, çünki ARC referans döngələrini qıra bilmir.

Bu problemi həll etmək üçün, zəif (weak) və sahibsiz (unowned) referanslar istifadə olunur, bunlar obyektin referans sayını artırmır. Bu, döngələri qırmağa və yaddaşı düzgün şəkildə azad etməyə imkan verir.

Nümunə:

class Person {
    var name: String
    weak var apartment: Apartment? // zəif referans

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // sahibsiz referans

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Burada, PersonApartment bir-birinə istinad edir, amma bir referans zəifdir, bu da yaddaş sızmalarını qarşısını alır.

Əgər referans döngələri qırılmazsa, obyektlər xarici referanslar olmasa da yaddaşda qalacaq və yaddaş sızmalarına səbəb olacaq.