← Back to list

Por que o SwiftUI gosta de utilizar structs ao invés de classes?

Ewelyn · 2026-04-08 22:17 · 0 claps · 2.0 min read
#struct #class #memory-allocation #swiftui
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

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

  1. Pega o endereço
  2. Vai até o heap
  3. 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