TTURLCache для кэширования моего изображения и данных - PullRequest
0 голосов
/ 02 января 2011

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

Именно тогда я начал замечать этот магический механизм кэширования, реализованный в three20, который называется TTURLCache . В его заголовочном файле я нахожу следующие методы интерфейса:

/**
 * Stores a data on disk.
 */
- (void)storeData:(NSData*)data forURL:(NSString*)URL; //method 1
- (void)storeData:(NSData*)data forKey:(NSString*)key;

/**
 * Stores an image in the memory cache.
 */
- (void)storeImage:(UIImage*)image forURL:(NSString*)URL; //method 2

/**
 * Stores an etag value in the etag cache.
 */
- (void)storeEtag:(NSString*)etag forKey:(NSString*)key; //method 3

Мои вопросы:

  1. Метод 1 и метод 2 в вышеприведенном коде: способны ли они только хранить данные или способны как извлекать, так и хранить?
  2. Что такое этаг в методе 3?
  3. Метод 1 говорит, что он будет хранить данные на диске, а метод 2 говорит, что он будет хранить изображение в памяти. Если я буду использовать метод 2 для сохранения изображения, оно будет потеряно после того, как я убью и перезапущу свое приложение?

Заранее большое спасибо.

1 Ответ

4 голосов
/ 02 января 2011
  1. Это методы хранения.Методы поиска являются отдельными.(См. Ниже.)
  2. Etags - это способ оптимизации сетевого трафика. См. Википедию для хорошего вступления.
  3. Я думаю , что Three20 хранит файл изображения на диске, а само декодированное изображение - в памяти.Конечно, любые кеши в памяти будут очищены, если приложение перезапустится, но помните, что в iOS 4 это, вероятно, случается реже, чем вы думаете.

Чтобы извлечь данные из кэшапопробуйте одно из:

/**
 * Gets the data for a URL from the cache if it exists and is newer than a minimum timestamp.
 *
 * @return nil if hthe URL is not cached or if the cache entry is older than the minimum.
 */
- (NSData*)dataForURL:(NSString*)URL expires:(NSTimeInterval)expirationAge
           timestamp:(NSDate**)timestamp;
- (NSData*)dataForKey:(NSString*)key expires:(NSTimeInterval)expirationAge
           timestamp:(NSDate**)timestamp;

/**
 * Gets an image from the in-memory image cache.
 *
 * @return nil if the URL is not cached.
 */
- (id)imageForURL:(NSString*)URL;
- (id)imageForURL:(NSString*)URL fromDisk:(BOOL)fromDisk;

Я бы посоветовал прочитать источник.Если память служит, TTURLCache не такой уж большой класс.

...