Junior — Middle
Milline on erinevus 'unowned' ja 'strong' võtmesõnade kasutamisel viidete deklareerimisel Swiftis?
sobes.tech AI
Vastus AI-lt
Swiftis kasutatakse võtmesõnu strong ja unowned viidete haldamiseks ning hoidmisringide (retain cycles) vältimiseks.
-
strong — see on standardne tugev viide, mis suurendab objekti viidete loendurit. Kuni on vähemalt üks tugev viide, objekt ei eemaldata mälust.
-
unowned — see on nõrk, kuid mitte-valikuline viide. See ei suurenda viidete loendurit, kuid eeldab, et viidatud objekt eksisteerib alati selle viite kasutamise ajal. Kui objekt on juba eemaldatud, põhjustab
unownedviite kasutamine jooksva ajal vea.
Näide:
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
Siin on tenant deklareeritud kui unowned, kuna korter ei tohiks hoida inimest tugevate viidetega, et vältida tsüklit, kuid eeldatakse, et inimene eksisteerib kauem kui korter.