Junior — Middle
Kāda ir atšķirība starp 'unowned' un 'strong' atslēgvārdu izmantošanu Swift valodā atsauču deklarēšanā?
sobes.tech AI
Atbilde no AI
Swift valodā atslēgvārdi strong un unowned tiek izmantoti atsauces pārvaldībai un noturēšanas ciklu (retain cycles) novēršanai.
-
strong — tas ir standarta stiprs atsauce, kas palielina objekta atsauces skaitītāju. Tikmēr, kamēr pastāv vismaz viena stipra atsauce, objekts netiks izņemts no atmiņas.
-
unowned — tas ir vājš, bet neopcionāls atsauce. Tas nepalielina atsauces skaitītāju, bet pieņem, ka atsauces objekts vienmēr pastāv šīs atsauces izmantošanas laikā. Ja objekts jau ir izņemts, piekļuve
unownedatsaucei radīs izpildes kļūdu.
Piemērs:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Šeit, tenant ir deklarēts kā unowned, jo dzīvoklim nevajag turēt cilvēku ar stipru atsauci, lai izvairītos no cikla, bet pieņem, ka cilvēks pastāv ilgāk nekā dzīvoklis.