//先把id记录下来,这是在cell里面加的property cell.objectIdforThisCell=**这个cell所代表的对象的id**; //在这个block里面的id,到这一步是设置为cell.objectIdforThisCell一样的 NSString *blockObjectid=cell.objectIdforThisCell; dispatch_async(imagequeue, ^{ UIImage *image = [[UIImage alloc] initWithContentsOfFile:小图文件path]; dispatch_async(dispatch_get_main_queue(), ^{ [self setImage:image forState:state]; }); image = [[UIImage alloc] initWithContentsOfFile:大图文件path]; dispatch_async(dispatch_get_main_queue(), ^{ if ([cell.objectIdforThisCell isEqualToString:blockObjectid]) { //关键在这里,当列表拖动速度很快的时候,cell的property已经被修改(因为reuse了),但是blockObjectid在这个线程里面还是旧的。 //当它们****不相等****,这个cell就是刷太快而被另外一个线程用上了,也就是说,这张大图已经不再需要输出到cell里面了(被另外一个线程的另外一张图冲掉了) //这样一来,在列表快速拖动的时候,瞬间把低清晰的图像给贴上去,等拖动速度慢下来之后,再贴高清晰的图,用户也感觉不出来,也不卡了。 [self setImage:image forState:state]; } }); }); dispatch_release(imagequeue);
解决cell加载图片卡的问题
最新推荐文章于 2018-04-29 14:58:27 发布