我尝试过多种异步加载图像的方法,但是他们都有这个问题,包括第三方框架。这让我相信它与我的单元格有关的行索引方法。
无论如何我正在使用Grand Central Dispatch和Blocks异步加载图像,这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomTableCell";
static NSString *CellNib = @"CustomizedCell";
CustomizedCell *cell = (CustomizedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
cell = (CustomizedCell *)[nib objectAtIndex:0];
}
// Configure the cell...
cell.Label.text = [self.TitleArray objectAtIndex:indexPath.row];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSString *String = [[self.Array objectAtIndex:indexPath.row];
NSURL *url = [NSURL URLWithString:String];
NSData *Data = [NSData dataWithContentsOfURL:url];
UIImage *Image = [UIImage imageWithData:Data];
dispatch_sync(dispatch_get_main_queue(), ^{
cell.ImageView.image = Image;
});
});
这似乎加载了图像Asychrnously,但就像我尝试使用第三方libarys,不同的代码等,图像闪烁。我的意思是,当你滚动一个单元格的图像时,似乎闪烁并转换到另一个单元格的另一个图像,然后快速改回来,使它看起来好像在闪烁。这只会在您滚动时发生,通常只会滚动到顶部的两个和底部两个单元格。 有什么想法吗? 如果有人能帮我解决这个问题,我真的很感激!
谢谢!
答案 0 :(得分:2)
好吧,暂时不要使用GCD,但我发现您的代码存在问题。
您是否随时取消当前流程? 我的意思是,你滚动查看其他单元格,但是已经有一个进程下载(旧的和可重复使用的)单元格的图像,非?也许那是你的“闪烁”问题。
如果是你,我会创建一个UIImageView的子类,并实现一种方法来取消当前连接,如果另一个图像想要加载。
顺便说一下,你可以使用NSOperation& NSOperationQueue,不使用任何第三个库。
祝你好运。