2015-06-19 57 views
0

一個tablview電池使用下面的代碼是設置...爲什麼我的tableview風聲鶴唳,當我滾動

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    MyTableviewcell *cell = [tableView dequeueReusableCellWithIdentifier:@"mytableviewcell" forIndexPath:indexPath]; 

    cell.titleLabel.text = [self.data[indexPath.row] objectForKey:@"node_title"]; 
    cell.taxonomy1Label.text = [self.data[indexPath.row] objectForKey:@"group"]; 


    @try { 
     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self.data[indexPath.row] objectForKey:@"image"]]]; 
     cell.thumbnailImageView.image = [UIImage imageWithData:imageData]; 

    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e); 
    } 

    return cell; 
} 

try/catch只是因爲它可能會或可能不會有一個形象,但有人甚至發生前我把它放進去了。看起來好像有一個問題,當它將單元出列時。有任何想法嗎?

+1

[NSData dataWithContentsOfURL:]正在導致滯後。你應該在後臺線程中做到這一點。 –

回答

0

如果你熟悉使用第三方庫或的CocoaPods,但是這是一個常見的問題,我建議使用https://github.com/rs/SDWebImagehttps://github.com/AFNetworking/AFNetworking,其具有的UIImageView類的方法來從背景中的URL處理加載圖像,並不在主線程中。

例如使用SDWebImage:

[cell.thumbnailImageView sd_setImageWithURL:yourImageURL]; 

這種方法會在後臺獲取圖像,不會阻塞主線程,不會讓你的UITableView抖動。

-1

通過嘗試獲取圖像阻礙主線程。把你的圖像調用放在一個單獨的線程中。

0

前面已經提到這個調用塊主線程:什麼是不是已經提到

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self.data[indexPath.row] objectForKey:@"image"]]]; 

是處理這種工作的正確方法。

你不能只將上述內容包裝在GCD調用中,並期望一切都正常。

您需要延遲加載圖像並在適當時將它們填充到tableView。

最優雅的處理方法是自己寫NSOperation

Here是一個教程,任何進一步的問題讓我知道。

相關問題