Middle
Como é que as vistas que são um tipo de referência são armazenadas?
sobes.tech IA
Resposta da IA
As vistas (UIView e suas subclasses) no iOS são classes, ou seja, tipos de referência. O armazenamento de referências a elas é feito pelos seguintes mecanismos:
-
Referências fortes (Strong References):
- Por padrão, se declarar uma propriedade para UIView sem o especificador
weakouunowned, isso cria uma referência forte. - Uma referência forte aumenta o contador de referências do objeto. O objeto não será removido da memória enquanto existir pelo menos uma referência forte a ele.
- Este é o método padrão de armazenamento de views, quando é necessário que elas permaneçam na memória e sejam acessíveis.
//Referência forte var myView: UIView = UIView() - Por padrão, se declarar uma propriedade para UIView sem o especificador
-
Referências fracas (Weak References):
- Declaradas com a palavra-chave
weak. - Uma referência fraca não aumenta o contador de referências do objeto.
- Referências fracas não impedem a remoção do objeto da memória, se não houver referências fortes restantes.
- São usadas para evitar ciclos de referências fortes, uma situação comum é a relação pai-filho, onde o pai tem uma referência forte ao filho, e o filho às vezes pode ter uma referência ao pai. Nesse caso, a referência inversa ao pai deve ser fraca.
- Referências fracas devem ser opcionais (
Optional), pois o objeto pode ser removido, e a referência se tornaránil.
weak var parentView: UIView? - Declaradas com a palavra-chave
-
Referências não possuídas (Unowned References):
- Declaradas com a palavra-chave
unowned. - Como as referências fracas, elas não aumentam o contador de referências.
- Diferença: ao contrário das referências fracas, as referências não possuídas não são opcionais. Elas assumem que o objeto viverá pelo menos enquanto a referência existir. O acesso ao objeto após sua liberação causará uma falha (crash).
- Usadas quando se tem certeza de que o ciclo de vida da referência não excede o ciclo de vida do objeto ao qual ela aponta. No contexto de views, isso é menos comum que
weak.
//Menos comum para views, mas possível unowned var childView: UIView - Declaradas com a palavra-chave
-
Arrays e Coleções:
- Armazenar referências a views em arrays (
Array), dicionários (Dictionary) ou conjuntos (Set) também por padrão cria referências fortes aos elementos da coleção.
var subviews: [UIView] = [] - Armazenar referências a views em arrays (
A escolha entre referência forte, fraca ou não possuída depende do cenário de uso e da gestão do ciclo de vida dos objetos para evitar vazamentos de memória. No SwiftUI, os conceitos de gestão do ciclo de vida das views são diferentes, mas no contexto do UIKit esses mecanismos continuam sendo a principal forma de armazenamento de referências.