2012-04-09 57 views
0

在我的代碼,我下載的所有圖像的應用程序生命週期的初期:如何使用ASIHTTPDownloadCache進行緩存?

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]; 

    NSURL *url = [NSURL URLWithString:[item imagePath]]; 
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setCompletionBlock:^{ 
    //NSData *responseData = [request responseData]; 
    //[iw setImage: [UIImage imageWithData:responseData] forState:UIControlStateNormal]; 
}]; 

[request setFailedBlock:^{ 
    // NSError *error = [request error]; 
    //[iw setImage:nil forState:UIControlStateNormal];   
}]; 

[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 
    [request startSynchronous]; 
}];     

所有圖像名稱是獨一無二的。而且他們並沒有經常改變。我需要的是,在應用程序結束後還可以將圖像保存在緩存中。當我再次打開應用程序時,它會從下載的緩存中讀取它。
可能嗎?

回答

0

這確實是可能的。您的緩存存儲策略已正確。

您需要指定一個適當的高速緩存策略爲好,看到http://allseeing-i.com/ASIHTTPRequest/How-to-use#about_cache_policies

這裏最重要的是心靈的數據截止日期。在默認模式下,ASIHTTPRequest將關注到期日期,如果數據過期,將重新加載數據。根據我的經驗,服務器通常沒有指定適當的過期日期,所以請考慮使用ASIOnlyLoadIfNotCachedCachePolicy

如果您想要,您也可以自己指定失效日期(這可能對您更有趣,因爲您的圖像有時會發生變化)。按照我的鏈接,您需要的所有信息都在那裏(請參閱「其他緩存相關功能」)。

哦,另一件事:ASIHTTPRequest是不是最新的了。開發者已經放棄了這個項目。因此,ASIHTTPRequest不支持ARC等。如果可以,請切換到另一個框架,如AFNetworking或RestKit。

+0

真的嗎?好的,我可以轉移到AFNetworking。謝謝。 – Burak 2012-04-09 11:17:53

+0

再次嗨。我轉移到AFNetworking。現在,我應該如何將所有的應用程序加載到緩存中,然後在緩存中的應用程序中使用它們? – Burak 2012-04-09 13:07:56

+0

您可以使用NSURLCache(它與UIImageView(AFNetworking)類別一起使用),或手動拉動持久性緩存模塊(請參閱此處的討論:http://stackoverflow.com/questions/7529258/what-major-asihttprequest-features-is -afnetworking缺失)。如果在使用AFNetworking/NSURLCache緩存時遇到問題,請在SO上進行搜索或打開另一個 - 正確標記 - 問題 – JiaYow 2012-04-09 15:00:05