Cosa significa unowned nel contesto di Swift?
sobes.tech AI
Risposta dell'AI
Unowned si riferisce alla gestione automatica della memoria in Swift (ARC). Le referenze unowned vengono utilizzate per evitare cicli di riferimenti forti quando due oggetti si riferiscono reciprocamente. Una referenza unowned non aumenta il contatore di riferimenti dell'oggetto. A differenza di una referenza weak, una referenza unowned si aspetta sempre di puntare a un'istanza esistente; se l'istanza a cui si riferisce la referenza unowned viene liberata, il tentativo di accedervi causerà un errore in fase di esecuzione. Viene usata quando il ciclo di vita dell'oggetto correlato coincide o è più lungo di quello dell'oggetto che contiene la referenza unowned.
Esempio di utilizzo:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) dipartimento viene inizializzato")
}
deinit {
print("\(name) dipartimento viene deallocato")
}
}
class Course {
var name: String
unowned var department: Department // Riferimento weak non opzionale
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) corso viene inizializzato")
}
deinit {
print("\(name) corso viene deallocato")
}
}
var accounting: Department? = Department(name: "Contabilità")
var introToAccounting: Course? = Course(name: "Introduzione alla contabilità", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Ora l'oggetto Department può essere liberato
introToAccounting = nil // Ora l'oggetto Course può essere liberato
In questo esempio, Course ha una referenza unowned a Department. Poiché Course non può esistere senza Department (logicamente), e Department gestisce il ciclo di vita di Course tramite l'array courses, l'uso di unowned qui è appropriato. Questo previene un ciclo di riferimenti forti tra accounting e introToAccounting. Quando accounting diventa nil, l'oggetto Department viene deallocato, e successivamente anche l'oggetto Course, poiché non ci sono più riferimenti forti ad esso.