Practice iOS interviews with questions worth your time

Work through realistic prompts on concurrency, UIKit, SwiftUI, and how systems fit together—written for engineers preparing for phone screens, loops, and senior-level conversations.

How to use this site

Pick a topic or browse the full catalog. Open a question for a deeper write-up with code where it helps. Use the exercise on each card to practice explaining your answer out loud or on paper—same rhythm as the interview room.

Questions across Swift, SwiftUI, UIKit, and architecture—the topics that show up in real iOS and iPadOS interviews.

Each card gives you a tight summary, talking points for how to answer, and a small exercise so you rehearse instead of skimming.

Filter by topic, difficulty, or tag when you want to drill one area before a loop or on-site.

What we emphasize

The habits that separate strong iOS candidates

Lead with tradeoffs, not buzzwords

Interviewers reward clear comparisons—when to use actors vs queues, diffable data sources vs manual updates, async/await vs completion handlers—and why it matters in production.

Tie answers to real app behavior

Expect to connect APIs to scrolling, memory, threading, and state. The goal is to sound like someone who has shipped and debugged iOS apps, not someone who only read release notes.

Practice out loud

Use the short exercises on each card to rehearse how you would walk through a problem on a whiteboard or in a live-coding session.

Featured Questions

Questions to start with

What problems does diffable data source solve, and what does it not solve?

Show where UIKit snapshot-based updates help and where state modeling still matters

Key points

  • Cover safe animated updates and reduction of index-path bookkeeping bugs.
  • Explain that identity modeling still matters because unstable identifiers create visual glitches.
  • Mention performance implications for very large snapshots and frequent churn.

Practice

Design identifiers for a feed with ads, loading placeholders, and server-driven cards, then describe snapshot update rules.

When would you choose a Swift actor over a serial DispatchQueue?

Compare language-level isolation with traditional queue-based synchronization in production iOS code

Key points

  • Explain actor isolation and how it prevents data races at the type-system level.
  • Contrast that with a serial queue protecting mutable state through convention.
  • Call out interoperability, reentrancy, and when legacy APIs still justify queues.

Practice

Refactor a cache manager that uses a private queue so writes become actor-isolated and reads remain ergonomic.

How do task groups differ from async let in practical iOS code?

Explain when fixed child tasks make `async let` the better tool, and when dynamic fan-out or incremental result handling pushes you to task groups

Key points

  • Frame `async let` as the best fit for a small, fixed number of child tasks that are obvious in the current scope.
  • Explain task groups as the structured-concurrency tool for dynamic fan-out, result streaming, and policies like limited result collection or manual cancellation.
  • Mention that both are structured concurrency, then separate them by ergonomics, workload shape, and how explicitly you need to manage results.

Practice

You first fetch a feed payload, then discover 40 image URLs, but the screen only needs the first 12 decoded thumbnails to render quickly. Describe whether you would use `async let` or a task group, how you would cancel extra work, and what tradeoffs you would mention in an interview.

Topics

Learn by area