Sobes.tech
Junior

Zəif və güclü bağlantılar arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Yaddaş idarəetmə mexanizminin (ARC - Avtomatik Referans Sayımı) fərqi.

  • Güclü referans (Strong reference): Ob'ektin referanslar sayğacını 1 artırır. Ob'ekt, ona ən azı bir güclü referans olduğu müddətdə yaddaşdan azad edilə bilməz. Bu davranış Swift-də xüsusiyyətlər və dəyişənlər üçün standartdır.

  • Zəif referans (Weak reference): Ob'ektin referanslar sayğacını artırmır. İki və ya daha çox ob'ektin bir-birinə güclü referanslar saxlaması halında yaddaş sızmasının qarşısını almaq üçün istifadə olunur. Zəif referanslar həmişə opsionaldır (Optional), çünki onlara istinad edən ob'ekt hər zaman sərbəst buraxıla bilər. Ob'ekt sərbəst buraxıldıqda, zəif referans avtomatik olaraq nil olur.

Zəif referans və onun qarşısını almaq üçün nümunə:

class Person {
    let name: String
    var apartment: Apartment? // Başlanğıcda güclü referans
    init(name: String) { self.name = name }
    deinit { print("\(name) sərbəst buraxılır") }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Zəif referans
    init(unit: String) { self.unit = unit }
    deinit { print("Məişət \(unit) sərbəst buraxılır") }
}

var john: Person? // Person nümunəsi
var unit4A: Apartment? // Apartment nümunəsi

john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")

// Güclü referans döngüsü yaratmaq:
// john, mənzilə güclü referans saxlayır
// mənzil, şəxsə güclü referans saxlayır
john!.apartment = unit4A
unit4A!.tenant = john // Bu zəif olmalı, döngünü pozmaq üçün

john = nil // Nil-ə təyin etmək, döngü varsa, sərbəst buraxmaz
unit4A = nil // Nil-ə təyin etmək, döngü varsa, sərbəst buraxmaz

// Zəif referans istifadə edilərkən gözlənilən çıxış:
// John Appleseed sərbəst buraxılır
// Mənzil 4A sərbəst buraxılır

weak olmadan tenant üçün, destruktorlar çağrılmayacaq, bu isə yaddaş sızmasını göstərir.