我正在異步加載圖像到UITableView(GCD)上,並且看到一種奇怪的行爲,其中單元格將在多個圖像上「快門」,然後再建立一個圖像。這很難用言語來形容,所以我做了一個屏幕錄製,在這裏你會看到對於一個給定的單元格,多個圖像在它們定位之前會轉移。UITableView異步圖像通過多個圖像加載百葉窗
http://www.youtube.com/watch?v=PKuqng81QX4
我使用隊列來獲取圖像(從REST端點),然後在主隊列設置在單元中的圖像。下面的代碼片段:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// ..after getting the cell:
dispatch_queue_t imageQ = dispatch_queue_create("imageQ", NULL);
dispatch_async(imageQ, ^{
NSString *galleryTinyImageUrl = someFunctionToGetThumbnailUrl;
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:galleryTinyImageUrl]];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithData:imageData];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
});
});
dispatch_release(imageQ);
,這是得到在短時間內多次調用(即用戶向上彈起在桌子上,引發這些細胞圖像負載30斷火),這一事實令人關切的對我來說是否所有的異步線程「安全地」安全到達應有的位置。我所看到的行爲(在視頻中)似乎證實我在這裏做錯了事。我很感激你可能有的任何細節或廣泛的方法建議。
感謝您的幫助!
謝謝!我添加了'cell.imageView.image = nil;'在獲取一個新的/重用的單元格下面並修復了它! – Steven 2012-04-15 19:06:11
很高興我能幫助你。 – 2012-04-15 19:42:32
如何避免在循環中下載圖像? – mikezang 2012-04-20 12:42:54