O que é unowned no contexto do Swift?
sobes.tech IA
Resposta da IA
Unowned refere-se à gestão automática de memória em Swift (ARC). As referências unowned são usadas para evitar ciclos de referências fortes quando dois objetos se referenciam mutuamente. Uma referência unowned não aumenta o contador de referências do objeto. Ao contrário de uma referência weak, uma referência unowned espera-se que sempre aponte para uma instância existente; se a instância à qual a referência unowned aponta for liberada, qualquer tentativa de acesso resultará num erro em tempo de execução. É usada quando o ciclo de vida do objeto relacionado coincide ou é maior que o ciclo de vida do objeto que contém a referência unowned.
Exemplo de uso:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) department is being initialized")
}
deinit {
print("\(name) department is being deinitialized")
}
}
class Course {
var name: String
unowned var department: Department // Referência fraca não opcional
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) course is being initialized")
}
deinit {
print("\(name) course is being deinitialized")
}
}
var accounting: Department? = Department(name: "Accounting")
var introToAccounting: Course? = Course(name: "Introduction to Accounting", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Agora o objeto Department pode ser liberado
introToAccounting = nil // Agora o objeto Course pode ser liberado
Neste exemplo, Course tem uma referência unowned a Department. Como Course não pode existir sem Department (logicamente), e Department gerencia o ciclo de vida de Course através do array courses, o uso de unowned aqui é apropriado. Isso previne um ciclo forte de referências entre accounting e introToAccounting. Quando accounting se torna nil, o objeto Department é liberado, e depois o objeto Course também é liberado, pois não há mais referências fortes a ele.