2011-01-21 2 views
3

У кого-нибудь есть пример кода для реализации кэширования изображений с использованием NSURLRequest, NSURLConnection и политики NSURLRequestReturnCacheDataElseLoad?Внедрение NSURLRequest, NSURLConnection и NSURLRequestReturnCacheDataElseLoad политики

Я использую следующий код, но похоже, что кеширование не происходит. Все время я получаю изображение из URL. Пожалуйста, скажите мне, что случилось здесь:

NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://i54.tinypic.com/10pd2jk.png"]]; 
    NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; 
    NSLog(@"Received %d bytes", [data length]); 
    [req setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 
    data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; 
    NSLog(@"Received %d bytes", [data length]); 
    [[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10]; 


    UIImage *myImage = [UIImage imageWithData:data]; 
    UIImageView *sd = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)]; 
    sd.image = myImage; 
    [self.view addSubview:sd]; 
+0

У меня также есть эта же проблема. SDURLCache выглядит как способ, но примерный фрагмент кода, который представлен в документации, в идеале будет более полным. Я тоже не наблюдаю никакого кэширования. Когда я загружаю свое мнение, я говорю [self getImage]; Я предполагаю, что, используя SDURLCache, мне больше не нужно ничего делать. Или мне нужно вручную сохранить «последнее измененное» время, а затем прочитать из общего кэша? Если это так, это экономит мне время, так как я бы закончил реализацию кэширования ручного способа. – user798719

ответ

5

Вы можете взглянуть на использование SDURLCache: https://github.com/rs/SDURLCache

SDURLCache фактически сохраняет кэш на диске, в то время как NSURLCache нет. NSURLCache кэшируется только в памяти, поэтому в вашей сессии приложения. См. ReadMe по ссылке, которая объясняет это более подробно.

Update: Похоже NSURLCache делает кэш на диске, так как IOS 5.x: http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

+0

Не уверен, почему я получил нисходящее движение. SDURLCache фактически сохраняет кеш на диск, а NSURLCache - нет. NSURLCache кэшируется только в памяти, поэтому в вашей сессии приложения. (Я не подтвердил это в последнее время, но я совершенно уверен, что все еще так.) –

+0

Даунвит был моим. Я искал пример кода с использованием NSURLCache, как и вопрос. SDURLCache мне не пригодится, потому что я использую Mono. Но ваш комментарий прекрасно объясняет, почему NSURLCache не помог бы в любом случае, поэтому, если бы вы включили это в свой ответ, я был бы рад удалить downvote. Извините, я не комментировал раньше, я был в некоторой степени спешил в то время :) –

Смежные вопросы