Junior
O que é lazy?
sobes.tech IA
Resposta da IA
A palavra-chave lazy é usada para inicialização diferida de uma propriedade.
Uma propriedade com lazy é inicializada apenas na primeira vez que é acedida. Isto é útil para:
- Desempenho: se a criação do objeto requer muitos recursos, mas nem sempre é necessário.
- Evitar dependências cíclicas durante a inicialização.
- Trabalhar com recursos externos ou dados que podem não estar disponíveis na criação do objeto.
As propriedades lazy devem ser:
- Variáveis (
var), pois o seu valor pode mudar na primeira acessibilidade. - Sem observadores de propriedades (
willSet,didSet) até à primeira acessibilidade.
class HeavyResource {
init() {
print("Recurso pesado inicializado")
// Simulação de inicialização dispendiosa
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// propriedade lazy, inicializa-se na primeira utilização
lazy var heavyResource: HeavyResource = {
print("A criar recurso pesado")
return HeavyResource()
}()
init() {
print("\(name) inicializado")
}
func accessResource() {
print("A aceder ao recurso pesado...")
_ = heavyResource // Aqui ocorre a inicialização da propriedade lazy
print("Recurso acedido.")
}
}
// Inicializar o apresentador
let presenter = MyPresenter() // Saída: Presenter initialized
// O acesso ao recurso ocorre mais tarde, quando realmente necessário
presenter.accessResource()
/*
Saída:
A aceder ao recurso pesado...
A criar recurso pesado
Recurso pesado inicializado
Recurso acedido.
*/
// Acesso repetido não provoca re-inicialização
presenter.accessResource()
/*
Saída:
A aceder ao recurso pesado...
Recurso acedido.
*/