Co znamená unowned v kontextu Swift?
sobes.tech AI
Odpověď od AI
Unowned odkazuje na automatické řízení paměti v Swift (ARC). Unowned odkazy se používají k prevenci cyklů silných odkazů, když si dva objekty navzájem odkazují. Unowned odkaz nezvyšuje počítadlo odkazů objektu. Na rozdíl od weak odkazu se odhadává, že unowned odkaz vždy ukazuje na existující instanci; pokud instance, na kterou odkazuje unowned odkaz, je uvolněna, pokus o přístup k ní způsobí chybu za běhu. Používá se, když životní cyklus souvisejícího objektu odpovídá nebo je delší než životní cyklus objektu obsahujícího odkaz unowned.
Příklad použití:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) oddělení je inicializováno")
}
deinit {
print("\(name) oddělení je deinitializováno")
}
}
class Course {
var name: String
unowned var department: Department // Unowned odkaz
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kurz je inicializován")
}
deinit {
print("\(name) kurz je deinitializován")
}
}
var accounting: Department? = Department(name: "Účetnictví")
var introToAccounting: Course? = Course(name: "Úvod do účetnictví", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Nyní může být objekt Department uvolněn
introToAccounting = nil // Nyní může být objekt Course uvolněn
V tomto příkladu má Course odkaz unowned na Department. Protože Course nemůže existovat bez Department (logicky), a Department řídí životní cyklus Course přes pole courses, je použití unowned zde vhodné. Tím se zabrání silnému cyklu odkazů mezi accounting a introToAccounting. Když accounting bude nastaven na nil, objekt Department bude uvolněn, a následně i objekt Course, protože na něj již neexistují žádné silné odkazy.