Что такое Core Data
Что проверяют
Понимаете ли вы, что Core Data это не база данных, а фреймворк для графа объектов с сохранением на диск, и умеете ли работать с ним из нескольких потоков. Следом обычно спрашивают про миграции или просят сравнить со SwiftData и Realm.
Как отвечать
Core Data ведёт жизненный цикл объектов модели: связи, отслеживание изменений, валидацию, undo, а запись делегирует хранилищу. Обычно это SQLite, есть также бинарное хранилище и хранилище в памяти для тестов.
NSManagedObjectModel: схема из.xcdatamodeld, сущности, атрибуты, связи;NSPersistentStoreCoordinator: связывает модель с файлами хранилищ;NSManagedObjectContext: черновик, где живут объекты. На диск изменения попадают только послеsave();NSPersistentContainer: с iOS 10 собирает стек целиком, даётviewContextна главной очереди и фоновые контексты черезnewBackgroundContext()илиperformBackgroundTask.
Из практики стоит показать многопоточность. Контекст привязан к своей очереди: с объектами работают внутри perform, а между потоками передают NSManagedObjectID. Чтобы изменения из фона доезжали до интерфейса, включают automaticallyMergesChangesFromParent и задают mergePolicy: по умолчанию стоит NSErrorMergePolicy, и конфликт просто вернёт ошибку при сохранении. Объекты грузятся лениво (faulting), для длинных списков есть fetchBatchSize и NSFetchedResultsController.
Миграции: лёгкую контейнер выводит сам, сложная требует mapping model, с iOS 17 есть поэтапная через NSStagedMigrationManager. Синхронизацию с iCloud даёт NSPersistentCloudKitContainer, а SwiftData из iOS 17 построен поверх Core Data.
Где спотыкаются
Называют Core Data «ORM над SQLite». Следом спросят про faulting, граф объектов и undo, и ответ начнёт разваливаться.
Передают NSManagedObject из фонового контекста на главный поток. Падения редкие и плохо воспроизводятся; ловить их помогает аргумент запуска -com.apple.CoreData.ConcurrencyDebug 1.
Меняют модель без новой версии. После обновления приложение падает на старте у всех, у кого есть сохранённые данные, и узнают об этом из отчётов о падениях.