Sobes.tech
Junior — Middle

Программалоодо алсыз жана күчтүү шилтемелер эмне үчүн колдонулат жана алар эмнеге айырмаланат?

sobes.tech AI

AIден жооп

Programmalaşmada, xüsusən yaddaşın idarə olunmasında, obyektlərin həyat dövrünü nəzarət etmək və yaddaş sızmalarını qarşısını almaq üçün güclü (strong) və zəif (weak) istinadlar istifadə olunur.

  • Güclü istinad obyektin yaddaşda saxlanmasını təmin edir, ən azı bir güclü istinad mövcud olduğu müddətcə. Çöp toplayıcı onu silməyəcək.
  • Zəif istinad obyektin silinməsinə mane olmur. Əgər yalnız zəif istinadlar qalıbsa, o, yaddaşdan azad edilə bilər.

Bu, iki obyektin güclü istinadlar vasitəsilə bir-birinə istinad etdiyi və çöp toplayıcının onları silə bilmədiyi hallarda döngəvi istinadların qarşısını almaq üçün vacibdir. Belə hallarda, istinadlardan biri zəifləşdirilir.

Swift-də nümunə:

class Person {
    var name: String
    weak var apartment: Apartment? // zəif istinad
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    var unit: String
    var tenant: Person? // güclü istinad
    init(unit: String) {
        self.unit = unit
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john

Burada, apartment zəif istinad olaraq təyin olunub, beləliklə, PersonApartment arasında döngəvi istinad qarşısı alınır.