2010-03-18 2 views
0

Мы кэшируем изображения, загруженные с нашего сервера. Мы получаем данные от обратного вызова ASIHTTPRequest так:Содержит ли iPhone изображения, сохраненные в каталоге документов моего приложения?

#pragma mark ASIHTTPRequest callback 
-(void)imageDownloadFinished:(ASIHTTPRequest*)aRequest 
{ 
    NSString* fileName = aRequest.url.path.lastPathComponent; 
    [self imageDidArrive:[aRequest responseData] forFileName:fileName]; 
} 

Пишет данные изображения на наше локальное хранилище, как это:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0] ; 
NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain]; 
     NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename]; 

BOOL writeSuccess = [anImageData writeToFile:fileName atomically:NO]; 

Загруженные изображения всегда ожидаемый размер, вокруг 45-85KB ,

Позже мы читаем образы из нашего кэша, как это:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0] ; 
NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain]; 
     NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename]; 

image = [UIImage imageWithContentsOfFile:fileName]; 

Иногда образы вернулись из этого кэша чтения намного меньше, потому что они гораздо более сжато - около 5-10KB. ОО сделала это нам?

Edit - получается, что мы скачивание маленьких изображений, так что вопрос не стоит на iPhone

+0

Кстати, я отлаживаю код, который не является моим собственным, поэтому вполне готов поверить, что я что-то пропустил! –

+0

Как создается «anImageData»? Например, вы используете UIImageJPEGRepresentation()? –

+0

Он предоставляется обратным вызовом ASIHTTPRequest для успеха при загрузке изображения: #pragma mark ASIHTTPRequest callbacks - (void) imageDownloadFinished: (ASIHTTPRequest *) aRequest; { \t NSString * fileName = aRequest.url.path.lastPathComponent; \t [self imageDidArrive: [aRequest responseData] forFileName: имя_файла]; } –

ответ

0

Если я правильно читать ваш код, вы используете метод WriteToFile NSData: атомарно: для записи в файл. Это делает точную байтово-байтовую запись содержимого объекта NSData.

Похоже, что объект NSData создается непосредственно из содержимого HTTP-ответа, поэтому ответ «нет», не должно быть никакого сжатия.

+0

Что-то, безусловно, происходит! Но, возможно, это в некотором углу кода, который я еще не обнаружил. –

0

У нас есть решение. Когда телефон работает в сети 3G, O2 любезно входит в систему и применяет дополнительное сжатие JPG к нашим изображениям, так что они выглядят ужасно.

См. Это post on the UK 3G forum.