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ə weak və unowned 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):
nilola bilər.- Seçimli tip kimi elan edilir (
var delegate: SomeDelegate? weak). - Obrazın həyat dövrü ərzində
nilola biləcək istinadlar üçün istifadə olunur, məsələn, nümayəndələr. - Sistem avtomatik olaraq
weakistinadınınil-ə təyin edir, obyekt sərbəst buraxıldıqda.
-
Unowned (sahibsiz):
nilola 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
unownedilə 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.