Nano Hash - криптовалюты, майнинг, программирование

Как сохранить UIImage локально, чтобы избежать ненужного запроса к серверу?

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

   [self requestData ] ;
   UIImage *userImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:userProfileImageUrl ]]] ;
   [self.profileImageView  setImage:userImage ] ;

  • Ну, вы просто сохраняете его в каталоге документов с именем, которое вы можете получить из URL-адреса. Затем, прежде чем загружать его из URL-адреса, попробуйте, находится ли изображение в каталоге документов. Если это так, загрузите его оттуда, а не из URL-адреса. Другой вариант — увеличить размер NSURLCache, чтобы он хранил изображение дольше. Просто убедитесь, что сервер установил правильную дату истечения срока действия запроса изображения. 11.11.2013
  • Я думаю, вы должны использовать NSCache для хранения изображения в кеше. пример< /а> 13.11.2013

Ответы:


1

Я бы предложил использовать такую ​​библиотеку, как SDWebImage, которая обрабатывает кэширование и асинхронную загрузку.

11.11.2013

2

В первый раз вам нужно сохранить изображение в NSDocumentsDirectory. Для этого вам нужно выбрать путь к каталогу и добавить имя изображения, как это

 NSString * documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString * documentsPathAppend = [documentsPath stringByAppendingFormat:@"/%@",[userProfileImageUrl lastPathComponent]];

И вы должны написать изображение со следующим условием

    if(![[NSFileManager defaultManager]fileExistsAtPath:documentsPathAppend])
    {
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:userProfileImageUrl]]];
   [data writeToFile:documentsPathAppend atomically:YES];
    }

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

[self.profileImageView setImage:[UIImage imageWithContentsOfFile:imageEntity.imagePath]];
11.11.2013
  • Спасибо! а затем я бы установил такое изображение с URLWithString:documentsPathAppend вместо userProfileImageUrl?: UIImage *userImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:documentsPathAppend]]]; 11.11.2013
  • @hanumanDev, если вы просто хотите загрузить изображение и получить его из каталога документов, то поместите else, который будет иметь [self.profileImageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:documentsPathAppend]]]]; Нет необходимости использовать основные данные 11.11.2013
  • Если вы хотите загрузить изображение и сохранить его на постоянной основе, воспользуйтесь моим обновленным ответом. 11.11.2013

  • 3

    попробуйте этот метод для хранения UIImage в локальном каталоге.

    - (void)addImage:(UIImage *)image toCacheWithIdentifier:(NSString *)identifier {
    
        NSString *folderPath = @"LOCAL DIRECTORY PATH ";
        if(![[NSFileManager defaultManager] fileExistsAtPath:folderPath isDirectory:nil]) 
        {
    
            [[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil];
        }
    
       NSString *fileName = [NSString stringWithFormat:@"%@.png",identifier];
       fileName = [folderPath stringByAppendingPathComponent:fileName];
       NSData *imageData = UIImagePNGRepresentation(image);
       [imageData writeToFile:fileName atomically:YES];
    }
    

    чтобы получить изображение из локального каталога, попробуйте этот метод...

    - (UIImage *)imageFromCacheWithIdentifier:(NSString *)identifier 
    {
         NSString *folderPath = @"LOCAL DIRECTORY PATH ";
         NSString *fileName = [NSString stringWithFormat:@"%@.png",identifier];
         fileName = [folderPath stringByAppendingPathComponent:fileName];
    
         if([UIImage imageWithContentsOfFile:fileName]) 
         {
             return [UIImage imageWithContentsOfFile:fileName];
         }
         return nil;
     }
    
    11.11.2013

    4

    Еще один жизнеспособный подход — использовать NSURLCache (см. также: Доступ к кэшу) в официальной документации.

    Кэш HTTP был изобретен именно для этого требования: Кэширование в HTTP в RFC 2616.

    К сожалению, HTTP-кэширование — сложная тема, и точное поведение NSURLCache довольно неясно.

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

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..