Kas reiškia unowned Swift kontekste?
sobes.tech AI
Atsakymas iš AI
Unowned yra susijęs su automatinio atminties valdymo Swift (ARC). Unowned nuorodos naudojamos siekiant išvengti stiprių nuorodų ciklų, kai du objektai stipriai nurodo vienas kitą. Unowned nuoroda nesuteikia objekto nuorodų skaitiklio padidinimo. Skirtingai nuo weak nuorodos, unowned nuoroda visada tikimasi nurodyti į esamą egzempliorių; jei nurodytas egzempliorius yra išlaisvinamas, bandymas prie jo prieiti sukels vykdymo klaidą. Naudojama, kai susijęs objekto gyvavimo ciklas yra arba sutampa, arba ilgesnis už objekto, kuriame yra unowned nuoroda.
Naudojimo pavyzdys:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) departamentas pradeda inicializaciją")
}
deinit {
print("\(name) departamentas yra išlaisvinamas")
}
}
class Course {
var name: String
unowned var department: Department // Unowned nuoroda
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kursas pradeda inicializaciją")
}
deinit {
print("\(name) kursas yra išlaisvinamas")
}
}
var accounting: Department? = Department(name: "Accounting")
var introToAccounting: Course? = Course(name: "Introduction to Accounting", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Dabar `Department` objektas gali būti išlaisvintas
introToAccounting = nil // Dabar `Course` objektas gali būti išlaisvintas
Šiame pavyzdyje Course turi unowned nuorodą į Department. Kadangi Course negali egzistuoti be Department (loginė prasme), ir Department valdo Course gyvavimo ciklą per courses masyvą, unowned čia yra tinkamas. Tai išvengia stiprių ciklinių nuorodų tarp accounting ir introToAccounting. Kai accounting tampa nil, Department objektas yra išlaisvinamas, o po to ir Course objektas, nes nėra stiprių nuorodų į jį.