P
prepair.app
Пройти інтерв'ю →
EnglishУкраїнськаРусскийDeutsch
🍏

Middle iOS (Swift)Питання на співбесіді iOS розробника

Middle · 2–4 роки досвіду

Співбесіда iOS-розробника перевіряє систему типів Swift, розуміння ARC і вміння міркувати про стан інтерфейсу — плюс обов'язково трапиться питання, де retain cycle ховається на видноті. Нижче — питання, які ставлять найчастіше, кожне з еталонною відповіддю. Middle: глибше розуміння, оптимізацію та реальні робочі ситуації.

Спробувати — без реєстрації
Готуємо питання…

Теми для підготовки

Swift та опціонали
ARC і керування памʼяттю
SwiftUI та UIKit
Конкурентність: async/await, Combine, GCD
Архітектура і стан
Зберігання даних і мережа

7 питань рівня Middle з відповідями

1

Чим відрізняються `@State`, `@Binding` і `@ObservedObject`?

Відповідь

@State — значення, яким вʼю володіє і яке змінює. @Binding — посилання на чужий @State, передане вниз, щоб дочірній міг писати. @ObservedObject спостерігає за посилальним типом, що публікує зміни, і володіє ним хтось інший. Суміжна помилка — @ObservedObject там, де потрібен @StateObject: обʼєкт тоді перестворюється на кожному перемальовуванні.

2

Чим `async/await` відрізняється від completion-хендлерів?

Відповідь

Вони виражають те саме призупинення, але await лишає код лінійним, а помилки їдуть через throws, а не параметром, який можна забути перевірити. Компілятор до того ж забезпечує структурну конкурентність: дочірні задачі скасовуються разом із батьківською. Пастка переходу — виклик async-функції із синхронного контексту, для якого потрібен явний Task.

3

Що гарантує `@MainActor`?

Відповідь

Що позначений код виконується на головному потоці, і перевіряє це компілятор, а не домовленість. Робота з UI мусить іти на головному, і до акторів це була рантайм-перевірка, про яку дізнавалися падінням. Позначити вʼю-модель @MainActor зазвичай простіше, ніж диспетчеризувати на кожному виклику.

4

Навіщо потрібен `reuseIdentifier` і що ламається при недбалому перевикористанні?

Відповідь

Затим, що таблиця чи колекція тримає невеликий пул комірок і перевикористовує їх при прокрутці, а не створює по одній на рядок. Ламається стан, що лишився від попереднього мешканця: картинка з третього рядка, яка спливла в сороковому. Лікується prepareForReuse і скасуванням незавершеного завантаження зображення.

5

Як шукати витік памʼяті на iOS?

Відповідь

Memory graph debugger показує, що ще живе і хто це тримає, і зазвичай прямо називає цикл. Instruments із Leaks та Allocations відповідають на те саме питання в часі. Часті винуватці — замикання, що сильно захоплюють self, делегат, оголошений strong замість weak, і спостерігачі, яких не зняли.

6

Як утримати плавність прокрутки?

Відповідь

Не робити нічого дорогого на головному потоці під час скролу: декодувати зображення поза головним, кешувати декодований результат, а не дані, й уникати верстки, що перераховується щокадру. Тихий пункт — offscreen-рендеринг від тіней і масок: заокруглення з masksToBounds на безлічі комірок коштує більше, ніж здається.

7

Як розумно обробити помилки мережевого шару?

Відповідь

Змоделювати їх: типізована помилка, що розрізняє відсутність звʼязку, серверну 5xx, вашу 4xx і провал декодування, бо кожна заслуговує свого повідомлення і своєї політики повтору. Провал — нескінченно повторювати 400. Помилки декодування особливо мають бути гучними в розробці й ніколи не ковтатися мовчки.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Middle iOS (Swift) →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — iOS (Swift)

Junior iOS (Swift)Senior iOS (Swift)Усі питання iOS (Swift)

Інші спеціалізації

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟣Middle .NET Backend Developer🔷Middle C++