Kas ir unowned Swift kontekstā?
sobes.tech AI
Atbilde no AI
Unowned ir saistīts ar Swift automātisko atmiņas pārvaldību (ARC). Unowned atsauces tiek izmantotas, lai novērstu stipru atsauces ciklus, kad divi objekti stipri atsaucas viens uz otru. Unowned atsauce nesamazina objekta atsauces skaitītāju. Atšķirībā no weak atsauces, unowned atsauce vienmēr tiek sagaidīta norādot uz esošu eksemplāru; ja objekts, uz kuru norāda unowned atsauce, tiek atbrīvots, piekļuve tam izraisīs izpildes kļūdu. To izmanto, kad saistītā objekta dzīves cikls ir vai nu sakrīt, vai ir ilgāks par objekta, kurā ir unowned atsauce, dzīves ciklu.
Piemērs lietošanai:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) nodaļa tiek inicializēta")
}
deinit {
print("\(name) nodaļa tiek izbeigta")
}
}
class Course {
var name: String
unowned var department: Department // Unowned atsauce
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kurss tiek inicializēts")
}
deinit {
print("\(name) kurss tiek izbeigts")
}
}
var accounting: Department? = Department(name: "Accounting")
var introToAccounting: Course? = Course(name: "Introduction to Accounting", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Tagad `Department` objekts var tikt izbeigts
introToAccounting = nil // Tagad `Course` objekts var tikt izbeigts
Šajā piemērā Course ir unowned atsauce uz Department. Tā kā Course nevar pastāvēt bez Department (loģiski), un Department pārvalda Course dzīves ciklu caur courses masīvu, unowned šeit ir piemērots. Tas novērš stipru ciklisku atsauču veidošanos starp accounting un introToAccounting. Kad accounting kļūst par nil, Department objekts tiek izbeigts, un pēc tam arī Course objekts, jo tam vairs nav stipru atsauču.