Pular para o conteúdo
Hireaan

25 perguntas · iOS

Perguntas de entrevista para Desenvolvedor iOS

Perguntas para entrevistar desenvolvedores iOS: Swift, ARC e retain cycles, ciclo de vida do view controller, SwiftUI e concorrência moderna. Para separar quem monta uma tela de quem publica na App Store apps estáveis e sem vazamento de memória.

Entrevistar bem um desenvolvedor iOS é ir além de "sabe montar uma tela" e chegar a "entende o runtime, o modelo de memória e os paradigmas de UI da Apple". O tema mais revelador é gerenciamento de memória. O iOS usa contagem automática de referências (ARC), não garbage collector, então a pessoa precisa entender de verdade referências strong, weak e unowned e explicar como um retain cycle se forma. Um view controller que guarda uma closure que captura self de forma forte é o vazamento clássico, e quem não o enxerga vai publicar apps que incham de memória.

Além do ARC, você quer fluência em Swift: optionals e desempacotamento seguro, semântica de valor versus referência com structs e classes, protocolos e design orientado a protocolos, e generics. A história de UI está em transição, então bons candidatos trabalham tanto no UIKit, com o ciclo de vida do view controller e o padrão delegate, quanto no modelo declarativo e orientado a estado do SwiftUI, e explicam os trade-offs.

A concorrência também se modernizou: async/await e actors substituíram em grande parte o malabarismo manual com GCD, e você quer ouvir que o candidato tira o trabalho da main thread sem criar data races. As perguntas abaixo vão dos fundamentos de Swift à memória e ao ciclo de vida, e depois à UI, concorrência e arquitetura. Combine duas perguntas de Swift com uma conversa sobre retain cycle e um cenário de "o app está lento ou vazando memória", e você vai saber rápido se a pessoa já publicou e manteve um app iOS de verdade.

Fundamentos de Swift7 perguntas

  1. O que é um optional e quais são as formas seguras de desempacotá-lo?

    O que observar: if let, guard let, optional chaining e ??, e a noção de que o desempacotamento forçado é um crash à espera de acontecer.

  2. Qual a diferença entre struct e class, e quando você usa cada uma?

    O que observar: Tipo por valor versus por referência, herança só em classes, e struct como escolha padrão em Swift.

  3. Explique semântica de valor versus semântica de referência com um exemplo concreto.

    O que observar: Exemplo de cópia independente versus duas variáveis apontando para o mesmo objeto, e noção de copy-on-write.

  4. O que é programação orientada a protocolos e em que ela difere da herança clássica?

    O que observar: Composição por protocolos com extensões e implementações padrão, funcionando também com structs.

  5. Qual a diferença entre let e var, e o que significa mutating num método de struct?

    O que observar: Constante versus variável, e mutating permitindo ao método alterar a própria struct.

  6. Como funcionam os generics em Swift e quando você os usou?

    O que observar: Código reutilizável com segurança de tipos, restrições com protocolos e um exemplo real.

  7. Qual a diferença entre map, compactMap e flatMap?

    O que observar: Transformar, transformar descartando nils, e achatar coleções aninhadas.

Memória e ARC6 perguntas

  1. Como funciona a contagem automática de referências e em que ela difere de garbage collection?

    O que observar: Contagem de referências fortes com liberação determinística, sem coletor rodando, e por isso ciclos não são resolvidos sozinhos.

  2. Explique referências strong, weak e unowned e quando usar cada uma.

    O que observar: Strong mantém vivo, weak é opcional e vira nil, unowned assume que o objeto vive mais e quebra se não viver.

  3. Mostre como um retain cycle se forma com uma closure que captura self e como você o quebra.

    O que observar: Objeto guarda a closure, a closure captura self de forma forte, e a solução com [weak self] na capture list.

  4. O que é uma capture list e por que é tão comum escrever [weak self] numa closure?

    O que observar: Controle de como valores são capturados, e a noção de que nem toda closure precisa de weak self, por exemplo as que não escapam.

  5. Como você encontraria um vazamento de memória num app iOS em execução?

    O que observar: Instruments (Leaks, Allocations), Memory Graph Debugger do Xcode e checar se o deinit é chamado.

  6. Quando você usaria unowned em vez de weak, e qual é o risco?

    O que observar: Quando o outro objeto certamente vive pelo menos o mesmo tempo, com risco de crash se essa premissa falhar.

UIKit, SwiftUI e ciclo de vida6 perguntas

  1. Explique o ciclo de vida do view controller: viewDidLoad, viewWillAppear e os demais.

    O que observar: Ordem correta e o que fazer em cada um: configuração única no viewDidLoad, atualizações a cada exibição no viewWillAppear.

  2. O que é o padrão delegate e por que ele é tão comum no UIKit?

    O que observar: Um objeto delega decisões ou eventos a outro via protocolo, com a referência ao delegate declarada weak.

  3. O que muda no seu modelo mental ao passar do UIKit para o SwiftUI?

    O que observar: De manipular views de forma imperativa para descrever a UI em função do estado.

  4. O que são @State, @Binding e @ObservedObject no SwiftUI e quando você usa cada um?

    O que observar: Estado local, referência ao estado de outra view e objeto externo observável, com noção de @StateObject para quem cria o objeto.

  5. Como funciona o Auto Layout e como você depura uma constraint quebrada?

    O que observar: Constraints que definem posição e tamanho, leitura do log de conflitos e o View Debugger do Xcode.

  6. Como você reutiliza células numa table view ou collection view sem bugs de exibição?

    O que observar: dequeueReusableCell, resetar o estado no prepareForReuse e cuidado com imagens carregadas de forma assíncrona.

Concorrência, arquitetura e performance6 perguntas

  1. O que async/await e actors oferecem em relação ao trabalho manual com GCD e DispatchQueue?

    O que observar: Código assíncrono legível e actors isolando estado mutável, com o compilador ajudando a evitar data races.

  2. Por que as atualizações de UI precisam acontecer na main thread e como você volta para ela?

    O que observar: UIKit não é thread-safe; uso de @MainActor ou DispatchQueue.main.

  3. O que é uma data race e como a concorrência do Swift ajuda a evitá-la?

    O que observar: Acesso simultâneo com escrita sem sincronização, e actors e checagem de Sendable como proteção.

  4. Explique MVVM no iOS e como ele melhora a testabilidade em relação a view controllers gigantes.

    O que observar: Lógica de apresentação no ViewModel, testável sem UI, e o view controller só ligando dados à view.

  5. Como você persiste dados? Quando usaria UserDefaults, Core Data ou um arquivo?

    O que observar: UserDefaults para preferências pequenas, Core Data ou SwiftData para dados estruturados e consultas, arquivos para blobs, e Keychain para segredos.

  6. Um app parece lento na abertura e na rolagem. Como você diagnostica e corrige?

    O que observar: Medir com Instruments (Time Profiler), adiar trabalho da abertura, tirar processamento da main thread e otimizar imagens e células.

Dicas para a entrevista de Desenvolvedor iOS

  • Conduza a conversa para gerenciamento de memória. ARC e retain cycles separam desenvolvedores iOS reais de seguidores de tutorial mais rápido do que qualquer outro tema.
  • Valorize quem usa [weak self] e explica exatamente por quê, e não só por reflexo.
  • Confira se a pessoa tira o trabalho da main thread e entende por que a UI precisa rodar nela.
  • Pergunte sobre UIKit e SwiftUI. A maioria das bases de código reais mistura os dois, e a consciência dos trade-offs importa.
  • Peça um problema real de performance ou crash que a pessoa corrigiu num aparelho, não uma história sobre um app de exemplo.
  • Não dê peso demais à API mais nova do SwiftUI. Fundamentos de Swift e de memória importam muito mais.

FAQ

Perguntas frequentes

Quais habilidades um desenvolvedor iOS precisa ter?

Swift sólido, incluindo optionals e semântica de valor, domínio real de ARC e retain cycles, conforto com o ciclo de vida do view controller e com UIKit e SwiftUI, concorrência moderna com async/await e uma arquitetura como MVVM que mantenha os view controllers enxutos e testáveis.

Como as perguntas mudam entre iOS júnior e sênior?

O júnior constrói uma tela que funciona. O sênior aponta onde um retain cycle se forma, tira o trabalho da main thread, raciocina sobre estado no SwiftUI e cita problemas de memória ou performance que corrigiu num app publicado.

Devo testar UIKit ou SwiftUI?

Os dois. O SwiftUI é o caminho, mas a maioria dos apps em produção ainda tem UIKit. Um bom candidato trabalha com ambos e explica os trade-offs; dê mais peso ao que o seu app de fato usa.

Vale aplicar um desafio técnico para iOS?

Sim. Uma funcionalidade pequena com uma chamada de rede assíncrona e cuidado com memória, ou a correção de um vazamento num app de exemplo, revela os hábitos reais. Combine o desafio com estas perguntas para avaliar o julgamento de arquitetura.

Como triar candidatos a desenvolvedor iOS antes da entrevista?

Use perguntas de triagem na candidatura ou um teste curto de habilidades para filtrar quem entende de verdade Swift e gerenciamento de memória antes de gastar tempo de entrevista. Na Hireaan, as perguntas de triagem, os testes de habilidades e o ranking com IA ajudam a ver primeiro os candidatos mais fortes.

Abriu a vaga de Desenvolvedor iOS? Rode o processo na Hireaan.

A IA ranqueia os candidatos, você agenda as entrevistas, aplica testes de habilidades e envia a proposta, com um preço fixo para o time inteiro.

  • 14 dias grátis
  • Sem cartão de crédito
  • Cancele quando quiser
  • Conforme a LGPD