Junior
O que é o modificador de memória weak em Swift?
sobes.tech IA
Resposta da IA
O modificador weak é utilizado para quebrar ciclos de referências fortes entre objetos, quando um objeto tem uma referência forte a outro, e esse por sua vez tem uma referência forte de volta.
Características principais de weak:
- Não aumenta o contador de referências: O uso de
weaknão aumenta o número de referências fortes ao objeto. - Pode ser nil: A referência fraca é opcional (
Optional) e torna-se automaticamentenilquando o objeto ao qual se refere é desinicializado. - Usado para pai/filho: Frequentemente aplicado quando um objeto filho tem uma referência ao seu pai para evitar ciclos de referências fortes.
- Requer ser declarado como
var: Como a referência fraca pode tornar-senil, ela deve ser uma variável (var), não uma constante (let).
Exemplo de uso:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) está sendo inicializado")
}
deinit {
print("\(name) está sendo desinicializado")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Referência fraca
init(unit: String) {
self.unit = unit
print("Apartamento \(unit) está sendo inicializado")
}
deinit {
print("Apartamento \(unit) está sendo desinicializado")
}
}
Sem weak var tenant: Person? na classe Apartment, haveria um ciclo de referências fortes, e as instâncias de Person e Apartment não seriam desinicializadas quando não tivessem mais referências fortes. Graças a weak, quando a instância de Person é desinicializada, a referência tenant na instância de Apartment torna-se automaticamente nil.