我有一個UITableView自定義單元格showng文本和圖像。(圖像在右側)。起初,它一切正常,但後來我注意到,當滾動時,整個桌面視圖是滯後的。這是因爲應用程序可能會在單元格重新使用時進入屏幕時下載單元格圖像。我添加了一個NSCache來存儲下載的圖像,並告訴cellForRowAtIndexPath加載imageName(如果存在),否則,再次從Internet下載。但是,緩存是如此短暫的存儲空間,如果我用主頁按鈕退出我的應用程序並重新進入,那麼只有一些圖像保留,並且必須再次下載圖像。從網絡存儲圖像爲UITableView
我想找出最好的方式來存儲圖像比緩存更長期。我看過一些關於NSDirectory,並在應用程序庫中存儲,但還沒有想通出來呢..
最邏輯的解決方案,我相信,會是做這樣的事情:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/*stuff*/
NSString *imageName = [dictionary objectForKey:@"Image"];
UIImage *image = [--Cache-directory-- objectForKey:imageName]; //Try to get it from cache
if(image) //If image was received from cache:
{
cell.imageView.Image = image;
}
else //If not in cache:
{
image = [--local-directory-- objectForKey:imageName]; //Check some local directory
if(image) //If image received from directory:
{
cell.imageView.Image = image;
// + Also save it to the cache?
}
else //If image was in neither cache or local directory, get it from the website with given URL
{
image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];
//Then save to cache and to file?
}
}
}
圖像被快速地改變或切換出來,但不會那麼快速以致於我願意在應用程序中預先實現它們,以便每次添加圖像時都必須發佈更新。
這對我來說似乎合乎邏輯。我在正確的軌道上?我該如何「調用」本地目錄?就像,如果我將圖像添加到NSDirectory對象或其他東西,是不是每次都會重置?我如何訪問本地文件夾?
好吧,我會試試這個,但是這不會導致每次啓動它時tableview都會變空,最終會自動填充?這些圖像會被快速更新,而且我不希望在第一次啓動應用程序時看到沒有圖像的單元格。 – Sti 2012-07-17 21:04:45
或者至少,每次您退出該過程時,它似乎都是如此。很不錯! – Sti 2012-07-17 21:15:52
有沒有辦法在圖像準備就緒時加載圖像,而不是直到單元重新進入屏幕才加載圖像?或者我可以在前8行的viewDidLoad中設置圖像嗎? – Sti 2012-07-17 21:26:14