Хобрук: Ваш путь к мастерству в программировании

Наиболее эффективный способ хранения часто изменяемого массива изображений в основных данных.

Итак, я занимаюсь исследованием того, как хранить массив изображений, и в настоящее время я использую метод расширения, предложенный в другом посте о переполнении стека.

extension Array where Element: UIImage {
    // Given an array of UIImages return a Data representation of the array suitable for storing in core data as binary data that allows external storage
    func coreDataRepresentation() -> ImageArrayRepresentation? {
        let CDataArray = NSMutableArray()

        for img in self {
            guard let imageRepresentation = UIImagePNGRepresentation(img) else {
                print("Unable to represent image as PNG")
                return nil
            }
            let data : NSData = NSData(data: imageRepresentation)
            CDataArray.add(data)
        }

        return NSKeyedArchiver.archivedData(withRootObject: CDataArray)
    }
}

extension ImageArrayRepresentation {
    // Given a Data representation of an array of UIImages return the array
    func imageArray() -> ImageArray? {
        if let mySavedData = NSKeyedUnarchiver.unarchiveObject(with: self) as? NSArray {
            // TODO: Use regular map and return nil if something can't be turned into a UIImage
            let imgArray = mySavedData.compactMap({
                return UIImage(data: $0 as! Data)
            })
            return imgArray
        }
        else {
            print("Unable to convert data to ImageArray")
            return nil
        }
    }
}

Итак, когда я сохраняю массив, я просто использую images.coreDataRepresentation() и сохраняю его в атрибуте двоичных данных моей сущности.

Я боюсь, что поскольку массив может содержать более 900 изображений, постоянное сохранение всех этих данных приведет к задержкам. Я думал об использовании системы, похожей на систему реляционных баз данных, где я держу отдельный объект основных данных для хранения исключительно этих фотографий с отношениями, основанными на идентификаторе, однако, проведя дополнительные исследования, я обнаружил, что это не рекомендуется с основными данными. Есть лучший способ сделать это? Или один из этих методов лучше?

12.11.2018

  • Насколько велики изображения? Вы тестировали 900 изображений, чтобы увидеть, как это работает? 12.11.2018
  • @MikeTaverne изображения берутся непосредственно с камеры или из библиотеки фотографий, поэтому в зависимости от версии iPhone размер изображения может различаться. Также возможно, что будет более 900 изображений, хотя это, скорее всего, будет редкостью. 12.11.2018
  • @joshLor Не лучше ли хранить изображения внутри Documents Directory и хранить ссылку на них внутри атрибута объекта Core Data 12.11.2018
  • @ShubhamBakshi Какое преимущество это дает по сравнению с простым сохранением основных данных 13.11.2018
  • @joshLor Core Data обычно не используется для хранения мультимедийного контента, поскольку он в основном предназначен для текстовых данных и данных, которые не составляют слишком много в одной записи (например, в строке). С другой стороны, Documents Directory,Tmp Directory предназначены для мультимедийного контента, такого как аудио, видео и изображения. Я не уверен в более быстром поиске из Каталога документов по сравнению с Основными данными в случае изображений, но я Думаю, Каталог документов работает быстрее. Плюс это стандартный способ хранения изображений. Кроме того, вы сказали, что у вас есть 900 изображений, Каталог документов будет беспроигрышным вариантом. 13.11.2018
  • Вы можете обратиться к следующему для получения дополнительной информации: Сохранение изображений в Core Data 13.11.2018

Новые материалы

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

React Hooks: основы деструктуризации массива
Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

Пакеты R, используемые в Tesla
Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

Сокращение и слияние токенов для эффективных моделей VL: обзор
Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..