imageNamed is evil - Как использовать функцию - PullRequest
1 голос
/ 08 июля 2011
- (UIImage*)thumbnailImage:(NSString*)fileName
{
   UIImage *thumbnail = [thumbnailCache objectForKey:fileName];

   if (nil == thumbnail)
   {
      NSString *thumbnailFile = [NSString stringWithFormat:@"%@/thumbnails/%@.jpg", [[NSBundle mainBundle] resourcePath], fileName];
      thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
      [thumbnailCache setObject:thumbnail forKey:fileName];
   }
   return thumbnail;
}

Я получил этот код от http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/.Может кто-нибудь сказать мне, как использовать этот код.Мне нужна небольшая помощь, как использовать это вместо imageNamed.

Ответы [ 3 ]

3 голосов
/ 08 июля 2011
NSMutableDictionary *thumbnailCache=[[NSMutableDictionary alloc]init];

затем добавьте папку «thumbnails» в вашу папку ресурсов и поместите туда png

- (UIImage*)thumbnailImage:(NSString*)fileName
{
   UIImage *thumbnail = [thumbnailCache objectForKey:fileName];

   if (nil == thumbnail)
   {
      NSString *thumbnailFile = [NSString stringWithFormat:@"%@/thumbnails/%@.jpg", [[NSBundle mainBundle] resourcePath], fileName];
      thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
      [thumbnailCache setObject:thumbnail forKey:fileName];
   }
   return thumbnail;
}

Пример

добавить foo.png в папку ресурсов // здесь создаем объект UIImageView, затем

UIImageviewObject.image=[self thumbnailImage:@"foo.png"];
1 голос
/ 08 июля 2011

thumbnailCache - это NSMutableDictionary, объявленный в заголовочном файле, и его следует инициализировать в методе .m init или эквивалентном методе.

Если у вас есть изображения в ресурсах (в формате jpg, иначе измените .jpg на .png в коде), тогда строка должна выглядеть как

  NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], fileName];

Вместо использования

UIImage *thumbImage = [UIImage imageNamed:@"thumb.png"];

UIImage *thumbImage = [self thumbnailImage:@"thumb.png"];
1 голос
/ 08 июля 2011

Код использует NSMutableDictionary *thumbnailCache для кэширования экземпляров UIImage.Код предполагает, что в комплекте приложений есть каталог thumbnails с уменьшенными версиями их изображений.

Теперь метод сначала ищет в словаре thumbnailCache миниатюру для данного изображения (которая являетсятолько имя файла без полного пути, например myimage.png).Если в словаре уже не было изображения, оно загружается из каталога thumbnails (с использованием imageWithContentsOfFile: вместо imageNamed:, так как авторы утверждают, что последнее вызывает проблемы).Загруженное изображение затем сохраняется в словаре, поэтому в следующий раз, когда приложение запрашивает миниатюру, оно может использовать уже загруженный экземпляр.

Чтобы этот код работал правильно в вашем приложении, необходимо добавить thumbnails папка для вашего проекта.При добавлении его в проект обязательно выберите «Создать ссылки на папки для любых добавленных папок» вместо значения по умолчанию «Создать группы для любых добавленных папок» .Только тогда вы получите подкаталог в основном комплекте вашего приложения, в противном случае все файлы будут помещены в одну папку верхнего уровня.

Но весь смысл заключается в том, что автор утверждает:

  • Избегайте [UIImage imageNamed:].
  • Вместо этого имейте NSMutableDictionary.
  • Поиск изображений в словаре.
    • Если найдено, используйте это.
    • Если не найдено, загрузите изображение, используя [UIImage imageWithContentsOfFile:], чтобы вручную загрузить изображение и сохранить его в словаре.
...