我有一個分頁的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