Šta je unowned u kontekstu Swift?
sobes.tech АИ
Одговор од АИ
Unowned se odnosi na automatsko upravljanje memorijom u Swift (ARC). Unowned reference se koristi za sprečavanje ciklusa jakih referenci kada dva objekta međusobno referenciraju jedan drugog. Unowned referenca ne povećava brojač referenci objekta. Za razliku od weak reference, unowned referenca se uvek očekuje da ukazuje na postojeći primerak; ako primerak na koji ukazuje unowned referenca bude oslobođen, pokušaj pristupa će dovesti do greške u izvršavanju. Koristi se kada životni vek povezane instance odgovara ili je duži od životnog veka objekta koji sadrži unowned referencu.
Primer upotrebe:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) odsek se inicijalizuje")
}
deinit {
print("\(name) odsek se deinitializuje")
}
}
class Course {
var name: String
unowned var department: Department // Unowned referenca
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kurs se inicijalizuje")
}
deinit {
print("\(name) kurs se deinitializuje")
}
}
var accounting: Department? = Department(name: "Računovodstvo")
var introToAccounting: Course? = Course(name: "Uvod u računovodstvo", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Sada objekat Department može biti oslobođen
introToAccounting = nil // Sada objekat Course može biti oslobođen
U ovom primeru, Course ima unowned referencu na Department. Pošto Course ne može postojati bez Department (logički), i Department upravlja životnim ciklusom Course kroz niz courses, korišćenje unowned je prikladno. Ovo sprečava jak ciklus referenci između accounting i introToAccounting. Kada accounting postane nil, objekat Department se oslobađa, a zatim i objekat Course, jer na njega više nema jakih referenci.