Sobes.tech
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 unowned atsaucei 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.