Por que o SwiftUI gosta de utilizar structs ao invés de classes?
Por que o SwiftUI gosta de utiliza structs ao inves de classes?
Primeiramente para entendermos a razão precisamos entender sobre o que seria value types Vs reference type e alocação de memoria em swift que ocorre principalmente em dois tipos: pilhas(stack) e heap
- Pilhas:
Seria uma regiao e memoria que lida com alocação estática, operando com o principio de LIFO(Ultimo a entrar, primeiro a sair), sendo sua memoria gerenciada automaticamente pelo compilador ou pelo sistema em tempo de execução.
- Heaps:
Ela lida com alocação dinâmica de memoria, de modo que a memoria seja alocada e deslocada em tempo de execução
Class Pessoa {
var nome: String
init(nome: String) {
self.nome = nome
}
}
let p = Pessoa(nome: "Ana")
Ou seja, quando voce cria uma class o swift reserva um espaço na heap, cria um objeto lá e “p” guarda um ponteiro(endereço) para esse objeto que seria indireção(ponteiros) que significa que voce não acessa o valor diretamente, voce acessa o endereço que aponta para o valor
let p = Pessoa(nome: "Ana")
print(p.nome)
Aqui o que acontece é o seguinte:
p(stack) -> endereço 0xABC -> heap: Pessoa(nome: “Ana”)
Ou seja, para acessar “nome” o sistema
- Pega o endereço
- Vai até o heap
- Lê o valor
Já com Struct ele evita indireção na maioria dos casos o que torna ele mais eficiente, logo, o dado já esta direto ali, sem ponteiro, sem “viagem até o heap”.
E essa indireção é mais lenta porque ela envolve mais passos(Seguir ponteiro), pior uso do cache da CPU, mais chance de “cache miss”, e lembre-se, a CPU gosta de dados contínuos e a struct ajuda nisso
E uma das principais razoes é que o SwiftUI foi construído para trabalhar com value types porque facilita o controle de estado e a atualização da UI de forma mais previsível e eficiente, uma struct é um value type no qual, cada instancia é independente, se voce alterar uma copia isso não será refletido na original e isso permite para o SwiftUI recriar suas views o tempo todo sem medo de efeitos colaterais já que são mais leves e “baratos” de copiar
E já as class são refences types, onde múltiplas variáveis apontam para o mesmo objeto da memoria, ou seja, referencias compartilhadas, então, teríamos necessidade de gerenciar ciclo de vida, risco de inconsistência e haveria identidade(quem é quem) e tem muito mais overhead (heap + ARC) que são custos extras que não faz parte direta da logica do seu app, mas é necessário para o sistema funcionar, podendo acarretar com mudanças inesperadas e bugs difíceis de lidar
E por que isso importa para o SwiftUI ?
O SwiftUI cria e destrói views o tempo todo, se cada view fosse uma classe teríamos:
- Milhares de alocações na heap;
- Milhares de operações de ARC (o que não é ruim, só tem overhead);
- Mais cache de misses;
- Muita indireção(ponteiros).
E já com structs:
- Tudo é mais leve;
- Recriação barata;
- Diffs são rápidos;
- Dados diretos;
- Rápido de copiar;
- Zero indireção(ponteiros) na maioria dos casos.
Mas SwiftUI nunca usa class?
Usa sim, mas para estados e não para views, principalamente quando voce quer compartilhar e observar dados mutáveis entre varias partes da interface sendo feito com o padrão de observable objects.
메타데이터
- post_id
- 96aa6a7cd5c5
- slug
- por-que-o-swiftui-gosta-de-utilizar-structs-ao-invés-de-classes-96aa6a7cd5c5
- url
- https://medium.com/@ketlyn.ewelyn/por-que-o-swiftui-gosta-de-utilizar-structs-ao-inv%C3%A9s-de-classes-96aa6a7cd5c5
- canonical_url
- https://medium.com/@ketlyn.ewelyn/por-que-o-swiftui-gosta-de-utilizar-structs-ao-inv%C3%A9s-de-classes-96aa6a7cd5c5
- author_url
- https://medium.com/@ketlyn.ewelyn
- status
- ok
- fetched_at
- 2026-07-14 12:17:41