2012-05-28 44 views
-1

我有一個自定義的UITableViewCell。每個單元格都有獨特的圖像。我需要優化UITableViewCell圖片加載

我有一個圖像加載器類。我將一本字典傳遞給了ImageLoader的方法。由圖片網址和其他一些信息組成的詞典。當我們慢慢向下滾動UITableView時,這段代碼運行良好。但如果我們快速向下滾動,它會有一些滯後。我需要優化我的算法。有任何想法嗎。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [ImageLoader addImageToQueue:dictionary]; 
} 
+0

你將不得不比發佈更多的代碼! –

+0

您發佈的代碼似乎沒有任何意義。 – diegoreymendez

回答

1

我相信this tutorial會回答你們的問題是有用的。它涵蓋了您無法順利滾動以及如何解決問題的原因。

0
  • 禁用圖片加載和測試表行爲 - 問題可能是一個緩慢的單元初始化,如果自定義單元格drawRect被覆蓋,非常重視這個方法的文檔說,它的海軍使用放緩動畫顯着,找到優化繪圖的方法。
  • 如果順利與圖像加載禁用,考慮到限制併發負載操作的數量(與後面將要加載的未決操作),並使用高速緩存可用每當表滾動。
0

使用UITableView dequeueReusableCellWithIdentifier:

這基本上意味着,你不必每次都從頭開始重新創建表格單元格。如果您爲單元格指定一個重用標識符,它會將該單元格保留在內存中,並讓您在請求與該標識符匹配的單元格時將其取出。

由於每個單元都有一個獨特的形象,你可能是最好關閉設置每個單元的唯一標識符,從圖像的東西 - 也許是圖片的網址或文件名。這會消耗更多的內存,而不是處理和重新創建單元,但它會減少滾動滯後,並且如果圖像很小,則內存佔用不會太大。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *imageURL = urlOfImageForThisCell; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:imageURL]; 
    if(!cell) 
    { 
     cell = [self makeNewCell]; 
     //if your reuseIdentifier is unique to each image, you only ever need to set it's image here 
     cell.image = imageForThisCell; 

     cell.reuseIdentifier = imageURL; 
    } 

    //additional cell setup here 

    return cell; 
} 

您還需要在子類的UITableViewCell並覆蓋prepareForReuse看:

你可能喜歡的東西而告終。

0

我想看看雷Wenderlich對多線程和GCD here教程。

很難沒有看到您的cellForRowAtIndexPath:ImageLoader代碼,但我有一個懷疑,你ImageLoader的放緩下來到它必須等待它完成它提供了細胞前的點。即使它只是從磁盤讀取圖像,它應該在後臺線程來完成,異步使主線程可以專注於平穩滾動。

祝你好運!