Какой-либо способ получить Кэшируемый UIImage из моего каталога 'Documents'?

Все это зависит от того, что Вы делаете с датами. При простом сохранении их их, Java создал на Датах, вероятно, сделает все, к чему Вы хотите их. Однако при выполнении обширного управления датой времени Вы, вероятно, более обеспечены с Joda.

7
задан RexOnRoids 27 August 2009 в 03:39
поделиться

3 ответа

Вы можете кэшировать UIImages самостоятельно, как это делает -imageNamed: . Он просто загружает их, а затем держит их. Вы также можете удержать их, используя NSDictionary и реализовать свой собственный -imageNamed:

. Но меня больше беспокоят проблемы с масштабированием. Как ваши изображения попадают в документы, как вы их масштабируете и тестировали ли вы тот же файл изображения, который хранится в пакете? Я сомневаюсь, что -imageNamed: имеет к этому какое-то отношение. Я бы больше подозревал такие вещи, как тот факт, что к пакету применено некоторое сжатие (хотя у меня еще нет теории о том, почему это имеет значение на практике), различия в файле, или различия в том, как остальная часть программы ведет себя во время масштабирования (вызывая конкуренцию на диске или ЦП). Кэширование вряд ли связано с этой проблемой.

Я бы провел некоторое профилирование с помощью инструментов, чтобы попытаться выяснить, откуда исходит волнение. Вы максимально используете диск, процессор, память? В чем узкое место?

4
ответ дан 6 December 2019 в 08:16
поделиться

Самый простой способ - это NSMutableDictionary , где хранятся кэшированные изображения, и метод очистки кеша:

@interface UIImage (CacheExtensions)
+ (id)cachedImageWithContentsOfFile:(NSString *)path;
+ (void)clearCache;
@end

static NSMutableDictionary *UIImageCache;

@implementation UIImage (CacheExtensions)
+ (id)cachedImageWithContentsOfFile:(NSString *)path
{
    id result;
    if (!UIImageCache)
        UIImageCache = [[NSMutableDictionary alloc] init];
    else {
        result = [UIImageCache objectForKey:path];
        if (result)
            return result;
    }
    result = [UIImage imageWithContentsOfFile:path];
    [UIImageCache setObject:result forKey:path];
    return result;
}
+ (void)clearCache
{
    [UIImageCache removeAllObjects];
}
@end

Примечание: вы должны вызвать + [UIImage clearCache] из вашего метода didReceiveMemoryWarning . Кроме того, clearCache сделает недействительными все объекты в кэше, а не только неиспользуемые элементы; Чтобы исправить это, потребуются подкласс UIImage и более сложный механизм кэширования.

8
ответ дан 6 December 2019 в 08:16
поделиться

А как насчет записи собственного кэша изображений? У вас есть все части на своих местах, теперь вам просто нужно инкапсулировать их и вести учет уже загруженных изображений.

1
ответ дан 6 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: