Sobes.tech
Junior

Swift-də weak yaddaş modifikatoru nədir?

sobes.tech Süni İntellekt

AI-dan cavab

weak dəyişəni obyektlər arasında güclü referans dövrlərini pozmaq üçün istifadə olunur; bir obyekt digərinə güclü referans tutursa və bu obyekt də öz növbəsində geri güclü referansa malikdirsə.

weak-in əsas xüsusiyyətləri:

  • İstinad sayğacını artırmır: weak istifadə edilməsi obyektə güclü referansların sayını artırmır.
  • nil ola bilər: Zəif referans (Optional) kimi olur və avtomatik olaraq nil-ə çevrilir, obyekt deinitializasiya olunduqda.
  • Valideyn/uşaq münasibətlərində istifadə olunur: Uşaq obyektinin valideyninə referansı, güclü referans dövrlərini qarşısını almaq üçün tez-tez tətbiq edilir.
  • var kimi elan edilməlidir: Çünki zəif referans nil ola bilər, o, dəyişən (var) kimi elan edilməlidir, let kimi deyil.

İstifadə nümunəsi:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) başlanır")
    }

    deinit {
        print("\(name) sonlandırılır")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Zəif referans

    init(unit: String) {
        self.unit = unit
        print("Mənzil \(unit) başlanır")
    }

    deinit {
        print("Mənzil \(unit) sonlandırılır")
    }
}

Apartment sinifində weak var tenant: Person? olmadan, güclü referans dövrləri yaranar və PersonApartment nümunələri, başqa güclü referanslar olmadıqda, deinitializasiya olunmazlar. weak sayəsində, Person nümunəsi deinitializasiya olunduqda, Apartment içindəki tenant referansı avtomatik olaraq nil-ə çevrilir.