我有一个分页的UITableView
一次只显示一个项目。每个项目都是从互联网上获取的图片。我下载使用异步块放在图片:防止objc块的抄袭
- (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
,只是调用这个函数把它放到我的缓存中。
'self.currentIndex'已经将*不*被捕获。这是一个方法调用,而不是局部变量。另一方面,“索引”将在块创建时捕获。 – 2013-03-14 22:17:31
你是对的,问题不是来自这里,而是我更新'self.currentIndex'的方式。感谢您让我走上正轨! – Lowip 2013-03-14 22:20:15
即使您正在使用像_currentIndex这样的实例变量,它仍然不会被捕获,因为它不是局部变量。捕获的局部变量将是“self”。 – newacct 2013-03-15 03:02:23