我有一个分页的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/

10-08 21:00