Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
Networks
Swift
Git
CI/CD
Docker
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на iOS Developer в телеграм
Что такое цикл сильных ссылок и как его избежать?
В чём разница между weak и unowned? Где предпочтительнее использовать unowned?
Как реализовать нативный WebSocket-клиент без использования SignalR?
Расскажите о паттернах MVP и MVVM.
Какой минимальный таргет iOS используется для SwiftUI?
Как оптимизировать потребление памяти при загрузке изображений?
В какой коллекции поиск происходит быстрее?
Какие есть уровни приоритетов (QoS)?
Какие проблемы многопоточности встречаются на iOS?
Какие существуют способы сохранения данных в iOS?
Цикл сильных ссылок возникает, когда два или более объектов удерживают друг друга сильными ссылками, и счётчики не обнуляются. Такое «замыкание» блокирует освобождение памяти. Чтобы избежать, используют слабые (weak) или безвладельческие (unowned) ссылки для «обрыва» цикла.
weak хранит ссылку, которая автоматически обнуляется, когда объект деинициализируется, и требует опционального типа. unowned — неконтролируемая ссылка, не обнуляется и объявляется не-опциональным. unowned используют, когда зависимый объект гарантированно живет дольше или так же долго, как и владелец.
В iOS 13+ используют URLSessionWebSocketTask из URLSession. Создают задачу с URL ws://..., вызывают resume(), затем запускают циклические receive и send для обмена сообщениями.
MVP разделяет представление (View) и логику (Presenter), где Presenter обновляет View через интерфейс. MVVM добавляет слой ViewModel, связывающий Model и View через биндинги или реактивность (Combine), избавляя контроллер от логики и уменьшая тесную связанность.
SwiftUI появился в iOS 13, поэтому минимальный таргет для использования базовых возможностей — iOS 13. Некоторые новые фичи SwiftUI требуют iOS 14, 15 или 16, но для базового UI достаточно iOS 13.
Для экономии памяти при загрузке изображений используют ленивую загрузку (lazy loading), масштабирование под размер экрана (downsampling), кеширование через NSCache или сторонние библиотеки и освобождение неиспользуемых ресурсов. При этом важно загружать изображения в фоновых потоках и отображать их уже готовыми.
В Set и Dictionary поиск работает быстрее, чем в Array. Это связано с использованием хеширования, которое позволяет найти элементы за константное время.
Основные уровни:
.userInteractive
.userInitiated
.default
.utility
.background
.unspecified
Типичные проблемы:
Состояние гонки
Взаимные блокировки
Неправильный доступ к UI
Утечки памяти из-за циклов удержания
Основные способы:
UserDefaults
FileManager
Keychain
Core Data
SQLite
Codable + JSON
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
8
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
7
Рейтинг:
3
Сложность:
6
Рейтинг:
2
Сложность:
6