Sobes.tech
Junior — Middle

Yaddaş idarəsində Weak və Unowned tipli istinadlar arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də weakunowned tipli istinadlar yaddaş idarəsində güclü istinad döngülərini (retain cycles) qarşısını almaq üçün istifadə olunur, lakin davranış və tətbiq baxımından fərqlənirlər.

  • Weak (zəif istinad):

    • nil ola bilər.
    • Seçimli tip kimi elan edilir (var delegate: SomeDelegate? weak).
    • Obrazın həyat dövrü ərzində nil ola biləcək istinadlar üçün istifadə olunur, məsələn, nümayəndələr.
    • Sistem avtomatik olaraq weak istinadını nil-ə təyin edir, obyekt sərbəst buraxıldıqda.
  • Unowned (sahibsiz):

    • nil ola bilməz (non-opcional tip).
    • Obrazın həyat dövrü ərzində mövcud olduğu təmin edilir, məsələn, valideyn və uşaq arasında.
    • Əgər unowned ilə istinad olunan obyekt artıq sərbəst buraxılıbsa, ona giriş zamanı işləmə zamanı xəta (crash) baş verəcək.

Nümunə:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

// Burada, tenant `unowned`-dır, çünki mənzil kiracı olmadan mövcud ola bilməz.

class DelegateHolder {
    weak var delegate: SomeDelegate?
}

// Nümayəndə `weak`-dir, çünki əvvəlcədən sərbəst buraxıla bilər.

Beləliklə, weak nil ola biləcək istinadlar üçün uyğundur, unowned isə obyektin həyat dövrü ərzində hər zaman etibarlı olmalı olan istinadlar üçün uyğundur.