我有一个页面UITableView
一次只显示一个项目。每个项目都是从互联网上获取的图片。我使用 block 异步下载图像:
- (void)downloadImageForPost:(GifPost *)p atIndex:(NSInteger)index
{
[APIDownloader imageForSource:p.src
completion:^(NSData *data, NSError *error) {
if (self.currentIndex != index)
return;
[self.tableView
reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index
inSection:0]]
withRowAnimation:UITableViewRowAnimationNone];
}];
}
问题出if (self.currentIndex != index)
在self.currentIndex
块外修改的地方。假设我为我的所有图像调用此函数,而self.currentIndex = 0
. 如果我滚动到另一个索引,就像self.currentIndex
在执行时保存的那样,我的 if 条件不起作用。
有没有办法防止块复制指定的变量。如果没有,我该怎么做才能有正确的行为?
PS:我没有做任何事情data
,只是调用这个函数把它放在我的缓存中。