我有一个分页的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
不做任何事情,只是调用此函数将其放入我的缓存中。 最佳答案
正如Andrew Madsen所说,self.currentIndex
是一个方法调用。我的错误来自更新self.currentIndex
的地方。
关于iphone - 防止objc块复制属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15421223/