Во-первых, как указал Гилберт, пример кода не предназначен для производственного использования и будет медленным.
Во-вторых, вам не следует хранить изображения в Core Data.Пример может показать, как это сделать, но обычно это очень плохая идея .Вы должны хранить изображения на диске, а затем сохранять указатель (путь к файлу) на изображение в Core Data.Есть некоторые исключения из этого правила (очень маленькие изображения), но вы должны переосмыслить свой дизайн.
Наконец, большая часть медлительности, которую вы видите, может быть не связана с Базовыми данными.Код выбора изображений сам по себе очень медленный.Я бы порекомендовал изменить код так, чтобы он просто записывал на диск и видел, насколько это медленно по сравнению с записью в Core Data.Я был бы удивлен, если бы это было намного быстрее.
Обновление
Вы можете хранить небольшие изображения внутри Core Data, и мои советы с других постов, больше для рабочего стола, чем iOS.Причиной этого является кеш.На iOS кеш, который использует Core Data, очень маленький.Если вы храните изображения в большой базе данных, вы можете легко удалить этот кеш и заставить будущие вызовы, которые должны быть в кеше, попасть на диск.Это не жесткое и быстрое правило «не хранить двоичные данные», а скорее правило отслеживания вашей производительности, и если вы бьете по диску больше, чем должны, причиной могут быть двоичные данные.
Контакты
Что касается контактов, вы можете быть медленнее, потому что они делают вещи не так, как вы, и они могут легко использовать частные API для доступа к камере.Поскольку это Apple, они не обязательно играют по тем же правилам, что и мы.