Все это зависит от того, что Вы делаете с датами. При простом сохранении их их, Java создал на Датах, вероятно, сделает все, к чему Вы хотите их. Однако при выполнении обширного управления датой времени Вы, вероятно, более обеспечены с Joda.
Вы можете кэшировать UIImages
самостоятельно, как это делает -imageNamed:
. Он просто загружает их, а затем держит их. Вы также можете удержать их, используя NSDictionary
и реализовать свой собственный -imageNamed:
. Но меня больше беспокоят проблемы с масштабированием. Как ваши изображения попадают в документы, как вы их масштабируете и тестировали ли вы тот же файл изображения, который хранится в пакете? Я сомневаюсь, что -imageNamed:
имеет к этому какое-то отношение. Я бы больше подозревал такие вещи, как тот факт, что к пакету применено некоторое сжатие (хотя у меня еще нет теории о том, почему это имеет значение на практике), различия в файле, или различия в том, как остальная часть программы ведет себя во время масштабирования (вызывая конкуренцию на диске или ЦП). Кэширование вряд ли связано с этой проблемой.
Я бы провел некоторое профилирование с помощью инструментов, чтобы попытаться выяснить, откуда исходит волнение. Вы максимально используете диск, процессор, память? В чем узкое место?
Самый простой способ - это 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
и более сложный механизм кэширования.
А как насчет записи собственного кэша изображений? У вас есть все части на своих местах, теперь вам просто нужно инкапсулировать их и вести учет уже загруженных изображений.